Dados essenciaisTempo real

Chat e notificações em tempo real

Distribua mensagens para cada cliente conectado em tempo real, com canais fragmentados para clusters e streams para o histórico.

publicação, todos os assinantes
1
canais para clusters
Fragmentados
com streams
+histórico
Etapa 1 de 5
Os servidores assinam

Cada servidor WebSocket assina as salas em que os seus usuários conectados estão.

Sessão de exemploplaying
# Os servidores assinam
hotkv> SUBSCRIBE room:42
1) "subscribe"
2) "room:42"
3) (integer) 1

Uma demonstração animada com comandos reais do HotKV e respostas de exemplo. Clique em qualquer etapa para ir direto a ela. Os comandos e as respostas ficam em inglês, exatamente como você os digita e vê no HotKV.

O problema

Uma sala de chat ou um feed de notificações ao vivo precisa chegar a todos os usuários conectados ao mesmo tempo, em muitos servidores WebSocket. Fazer polling em um banco de dados é lento e caro demais, e os servidores precisam de um jeito compartilhado de avisar uns aos outros que algo aconteceu.

Como o HotKV resolve

Cada servidor WebSocket assina os canais que interessam aos seus usuários. Quando algo acontece, um único PUBLISH chega a todos os servidores assinantes, que o repassam aos seus usuários. Os canais fragmentados mantêm o tráfego no nó dono do canal em um cluster, e um stream ao lado de cada sala guarda o histórico para os usuários que entram depois.

Passo a passo

O que acontece, comando por comando

  1. 01

    Os servidores assinam

    Cada servidor WebSocket assina as salas em que os seus usuários conectados estão.

    SUBSCRIBE room:42
  2. 02

    Alice envia uma mensagem

    O servidor dela publica uma vez. A resposta diz quantos assinantes a receberam.

    PUBLISH room:42 "{\"from\":\"alice\",\"text\":\"Deploy is green\"}"
  3. 03

    Guarde o histórico

    A mensagem também é anexada ao stream da sala, limitado às últimas 1000 mensagens.

    XADD room:42:history MAXLEN ~ 1000 * from alice text "Deploy is green"
  4. 04

    Bob se reconecta depois

    Ele lê as últimas 50 mensagens do stream e depois passa a receber o canal ao vivo.

    XREVRANGE room:42:history + - COUNT 50
  5. 05

    Canais fragmentados em um cluster

    No modo cluster, SPUBLISH mantém a mensagem no nó dono do canal.

    SPUBLISH room:{42}:typing "alice"
Onde se encaixa

Cenários reais

Chat de equipe e de suporte

As mensagens se espalham para todos os servidores que têm a conexão de um membro, e o stream entrega o histórico a quem acabou de chegar.

Notificações ao vivo

Atualizações de pedidos, menções e alertas são enviados ao navegador no momento em que acontecem.

Apps colaborativos

Posições do cursor e indicadores de digitação são transmitidos em canais de vida curta.

Integrado

O que você ganha

Fan-out

Uma publicação chega a todos os assinantes.

PUBLISHSUBSCRIBE

Assinaturas por padrão

Assine room:* para receber todas as salas.

PSUBSCRIBE

Pub/sub fragmentado

Os canais ficam no nó que é dono deles em um cluster.

SPUBLISHSSUBSCRIBE

Histórico

Junte um canal a um stream limitado para as mensagens que os usuários perderam.

XADDXREVRANGE

Perguntas frequentes

As mensagens de pub/sub são armazenadas?

Não. O pub/sub entrega para quem está inscrito naquele momento. Use um stream ao lado do canal se os usuários precisarem de histórico.

Funciona em um cluster?

Sim. Use pub/sub fragmentado (SPUBLISH, SSUBSCRIBE) para que o tráfego de cada canal fique no nó dono dele.

Posso ser notificado quando as chaves mudam?

Sim. As notificações de keyspace publicam eventos para as mudanças de chaves. Veja a documentação sobre notificações de keyspace.

Casos de uso relacionados

Experimente com a sua própria carga de trabalho

O HotKV fala o protocolo Redis, então você pode apontar um cliente existente para ele e executar estes mesmos comandos.