Datos básicosTiempo real

Chat y notificaciones en tiempo real

Distribuye mensajes a cada cliente conectado en tiempo real, con canales fragmentados para clústeres y streams para el historial.

publicación, todos los suscriptores
1
canales para clústeres
Fragmentados
con streams
+historial
Paso 1 de 5
Los servidores se suscriben

Cada servidor WebSocket se suscribe a las salas en las que están sus usuarios conectados.

Sesión de ejemploplaying
# Los servidores se suscriben
hotkv> SUBSCRIBE room:42
1) "subscribe"
2) "room:42"
3) (integer) 1

Un recorrido animado con comandos reales de HotKV y respuestas de ejemplo. Haz clic en cualquier paso para saltar a él. Los comandos y las respuestas se quedan en inglés, tal como los escribes y los ves en HotKV.

El problema

Una sala de chat o un feed de notificaciones en vivo tiene que llegar a todos los usuarios conectados a la vez, repartidos entre muchos servidores WebSocket. Consultar una base de datos es demasiado lento y caro, y los servidores necesitan una forma compartida de avisarse de que algo ha pasado.

Cómo lo resuelve HotKV

Cada servidor WebSocket se suscribe a los canales que interesan a sus usuarios. Cuando ocurre algo, un solo PUBLISH llega a todos los servidores suscritos, que lo reenvían a sus usuarios. Los canales fragmentados mantienen el tráfico en el nodo propietario del canal dentro de un clúster, y un stream junto a cada sala guarda el historial para los usuarios que se unen más tarde.

Paso a paso

Qué ocurre, comando a comando

  1. 01

    Los servidores se suscriben

    Cada servidor WebSocket se suscribe a las salas en las que están sus usuarios conectados.

    SUBSCRIBE room:42
  2. 02

    Alice envía un mensaje

    Su servidor publica una vez. La respuesta es cuántos suscriptores lo recibieron.

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

    Conserva el historial

    El mensaje también se añade al stream de la sala, limitado a los últimos 1000 mensajes.

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

    Bob se vuelve a conectar más tarde

    Lee los últimos 50 mensajes del stream y luego pasa a escuchar el canal en vivo.

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

    Canales fragmentados en un clúster

    En modo clúster, SPUBLISH mantiene el mensaje en el nodo propietario del canal.

    SPUBLISH room:{42}:typing "alice"
Dónde encaja

Escenarios reales

Chat de equipo y de soporte

Los mensajes se distribuyen a todos los servidores que tienen la conexión de un miembro, y el stream da a los recién llegados los mensajes anteriores.

Notificaciones en vivo

Las actualizaciones de pedidos, las menciones y las alertas llegan al navegador en el momento en que ocurren.

Apps colaborativas

Las posiciones del cursor y los indicadores de escritura se difunden en canales de vida corta.

Integrado

Qué obtienes

Distribución

Una publicación llega a todos los suscriptores.

PUBLISHSUBSCRIBE

Suscripciones por patrón

Suscríbete a room:* para recibir todas las salas.

PSUBSCRIBE

Pub/sub fragmentado

En un clúster, los canales se quedan en el nodo que los posee.

SPUBLISHSSUBSCRIBE

Historial

Acompaña un canal con un stream limitado para los mensajes que los usuarios se perdieron.

XADDXREVRANGE

Preguntas frecuentes

¿Se guardan los mensajes de pub/sub?

No. Pub/sub entrega a quien esté suscrito en ese momento. Usa un stream junto al canal si los usuarios necesitan historial.

¿Funciona en un clúster?

Sí. Usa pub/sub fragmentado (SPUBLISH, SSUBSCRIBE) para que el tráfico de cada canal se quede en el nodo que lo posee.

¿Puedo recibir avisos cuando cambian las claves?

Sí. Las notificaciones del keyspace publican eventos cuando cambian las claves. Consulta la documentación sobre notificaciones del keyspace.

Casos de uso relacionados

Pruébalo con tu propia carga de trabajo

HotKV habla el protocolo de Redis, así que puedes apuntar un cliente que ya usas hacia él y ejecutar estos mismos comandos.