Données de baseTemps réel

Chat et notifications en temps réel

Diffusez les messages à chaque client connecté en temps réel, avec des canaux shardés pour les clusters et des streams pour l'historique.

publication, tous les abonnés
1
canaux pour les clusters
Shardés
avec les streams
+historique
Étape 1 sur 5
Les serveurs s'abonnent

Chaque serveur WebSocket s'abonne aux salons où se trouvent ses utilisateurs connectés.

Session d’exempleplaying
# Les serveurs s'abonnent
hotkv> SUBSCRIBE room:42
1) "subscribe"
2) "room:42"
3) (integer) 1

Une démonstration animée avec de vraies commandes HotKV et des exemples de réponses. Cliquez sur une étape pour y accéder directement. Les commandes et les réponses restent en anglais, exactement comme vous les saisissez et les voyez dans HotKV.

Le problème

Un salon de discussion ou un fil de notifications en direct doit atteindre chaque utilisateur connecté en même temps, à travers de nombreux serveurs WebSocket. Interroger une base de données en boucle est trop lent et trop coûteux, et les serveurs ont besoin d'un moyen commun de se signaler qu'il s'est passé quelque chose.

Comment HotKV s'en charge

Chaque serveur WebSocket s'abonne aux canaux qui intéressent ses utilisateurs. Quand quelque chose se produit, un seul PUBLISH atteint chaque serveur abonné, qui le transmet à ses utilisateurs. Dans un cluster, les canaux shardés gardent le trafic sur le nœud propriétaire du canal, et un stream à côté de chaque salon conserve l'historique pour les utilisateurs qui arrivent plus tard.

Étape par étape

Ce qui se passe, commande par commande

  1. 01

    Les serveurs s'abonnent

    Chaque serveur WebSocket s'abonne aux salons où se trouvent ses utilisateurs connectés.

    SUBSCRIBE room:42
  2. 02

    Alice envoie un message

    Son serveur publie une seule fois. La réponse indique combien d'abonnés l'ont reçu.

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

    Conserver l'historique

    Le message est aussi ajouté au stream du salon, plafonné aux 1000 derniers messages.

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

    Bob se reconnecte plus tard

    Il lit les 50 derniers messages dans le stream, puis passe en direct sur le canal.

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

    Canaux shardés en cluster

    En mode cluster, SPUBLISH garde le message sur le nœud propriétaire du canal.

    SPUBLISH room:{42}:typing "alice"
Où cela s'applique

Scénarios concrets

Chat d'équipe et chat de support

Les messages sont diffusés à chaque serveur qui détient la connexion d'un membre, et le stream donne l'historique aux nouveaux venus.

Notifications en direct

Les mises à jour de commandes, les mentions et les alertes sont envoyées au navigateur dès qu'elles se produisent.

Apps collaboratives

Les positions de curseur et les indicateurs de saisie sont diffusés sur des canaux éphémères.

Intégré

Ce que vous obtenez

Diffusion

Une publication atteint chaque abonné.

PUBLISHSUBSCRIBE

Abonnements par motif

Abonnez-vous à room:* pour recevoir tous les salons.

PSUBSCRIBE

Pub/sub shardé

Dans un cluster, les canaux restent sur le nœud qui les possède.

SPUBLISHSSUBSCRIBE

Historique

Associez un canal à un stream plafonné pour les messages que les utilisateurs ont manqués.

XADDXREVRANGE

Questions fréquentes

Les messages pub/sub sont-ils stockés ?

Non. Le pub/sub livre à ceux qui sont abonnés à cet instant. Utilisez un stream à côté du canal si les utilisateurs ont besoin d'un historique.

Cela fonctionne-t-il en cluster ?

Oui. Utilisez le pub/sub shardé (SPUBLISH, SSUBSCRIBE) pour que le trafic de chaque canal reste sur le nœud qui le possède.

Puis-je être notifié quand des clés changent ?

Oui. Les keyspace notifications publient des événements lors des modifications de clés. Consultez la documentation sur les keyspace notifications.

Cas d'usage associés

Essayez-le sur votre propre charge de travail

HotKV parle le protocole Redis. Vous pouvez donc y connecter un client existant et exécuter ces mêmes commandes.