websocket-pubsub
[ ATENÇÃO! EM DESENVOLVIMENTO ]
Solução de PubSub & RPC usando WebSocket e node.js para aplicações de baixa e média complexidade
websocket-pubsub é uma biblioteca que tem o objetivo de facilitar o desenvolvimento de aplicações dinâmicas por meio dos padrões pub-sub/ Publish–Subscribe com Tópicos e RPC utilizando o protocolo WebSocket.
A transfência das mensagens entre Cliente e Servidor é feito de forma compactada, usando um algoritmo de Delta Encoding (diff & patch) que garante o transporte apenas da diferença existente entre os dados conhecidos pelo cliente com os novos dados publicados no servidor, diminuindo o consumo de banda e latencia.
O websocket-pubsub pode ser usado em páginas Web/PWA, aplicativos Mobile (React Native e soluções baseadas em WebView [como Ionic e aplicações geradas com uso do Cordova/Phonegap]) e integração entre servidores Node.js.
O que posso fazer com websocket-pubsub
- Criar publicador de conteúdo (PUBLISHER) no servidor (node.js) que envia mensagem para um tópico (TOPIC) a partir de uma busca em um repositório.
- A partir da Web, Aplicativo Mobile ou Node.js, ouvir (SUBSCRIBER) as mensagens envidadas para um Tópico, recebendo as atualizações de forma compactada.
- Disponibilizar métodos (ACTION) no servidor que podem ser invocados pelos clientes (Web, Mobile, Node.js), permitindo receber respostas Síncronas (com Promises) para essa ação [RPC]
- No servidor, a qualquer momento e fluxo, solicitar a publicação de novos dados de um Tópico cadastrado.
- Atualizar página Web ou Aplicativos Mobile sempre que uma atualização ocorra no servidor por meio do padrão PubSub
- Utilizar MongoDB, PostgreSQL ou qualqer outro tipo de repositório de dados, até mesmo repositório EM MEMÓRIA.
- Adicionar Midlewares nas Actions ou Publishers para ter um controle fino sobre a execução, permitindo, por exemplo, gerenciar Autenticação, Autorização de acesso ou Geração de Logs de execção.
Arquitetura
Abaixo está disponível todas as funcionalidades/componentes existentes no websocket-pubsub
- Server Sua aplicação Node.js. No servidor serão criados os publicadores de conteúdo e os métodos de ação. Nele também serão criados os repositórios de acesso aos dados.
- Client Sua aplicação consumidora dos dados disponibilizados pelo servidor. Pode ser uma aplicação WEB, aplicativo Mobile ou até mesmo um outro servidor Node.js. O cliente pode se inscrever (SUBSCRIBER) para receber atualizações em um tópico ou até mesmo executar métodos disponibilizados pelo servidor.
- Repository É um repositório de dados. O websocket-pubsub define a interface genérica para os repositórios, permitindo ao desenvolvedor implementar seu proprio repositório usando qualquer banco de dados que lhe interesse. Existe uma implementação de repositório EM MEMÓRIA que é usado nos exemplos. Na documentação existe exemplos de criação de repositórios usando banco de dados Relacional (SQL) e até MongoDB.
- Publisher Suas implementações de publicadores de conteúdo nos tópicos. Um publicador de conteúdo utiliza um ou mais repositórios para consultar os dados que serão publicados. Para tópicos com ID, o publicador recebe este parametro durante a consulta.
- Topic O tópico é o filtro de conteúdo que um cliente pode ter interesse em receber. O cliente faz a inscrição em um tópico. Os tópicos são alimentados pelos publicadores. Existem dois tipos de tópicos LIVRES e COM IDENTIFICADOR. Um tópico livre é usado para funcionalidades genéricas, como por exemplo, receber notificações sobre a criação de novos itens em uma coleção no servidor. Já um tópico COM IDENTIFICADOR é usado para que o cliente possa ser informado quando um item com identificador específico recebe atualizações, como por exemplo, em um sistema de e-comerce o cliente pode ser informado sobre a atualização do estoque ou preço de um produto específico.
Porque e Quando usar isso?
Porque é legal :)
O websocket-pubsub vai te ajudar se:
- A principal necessidade da sua aplicação é receber atualizações em tempo real de forma ágil e leve
- Sua aplicação não é do tamanho do Facebook (VEJA LIMITAÇÕES ABAIXO)
- Você deseja padronizar/reutilizar o mecanismo de comunicação em páginas WEB, Aplicativo Mobile e Servidor
- Você deseja diminuir consideravelmente o tamanho e quantidade de dados trafegados entre cliente e servidor por meio do algoritmo de compactação e delta implementado nessa solução
Limitações
- Não permite (ainda) escalar para múltiplos servidores ou cores. Sua aplicação será single core.
- Não dá suporte (ainda) a WebSocket binário (ArrayBuffer). A transferência dos dados (compactados e delta) é somente do tipo Texto.
- Se estiver desenvolvendo páginas WEB, saiba que o motor de busca do Google não entende WebSocket, portanto, fazer uso exclusivamente de WebSocket para renderizar o conteúdo de sua página vai prejudicar as suas otimizações para mecanismos de busca - SEO