KerndatenEchtzeit

Echtzeit-Chat und Benachrichtigungen

Verteilen Sie Nachrichten in Echtzeit an jeden verbundenen Client, mit geshardeten Kanälen für Cluster und Streams für den Verlauf.

Publish, jeder Abonnent
1
Kanäle für Cluster
Geshardete
mit Streams
+Verlauf
Schritt 1 von 5
Server abonnieren

Jeder WebSocket-Server abonniert die Räume, in denen seine verbundenen Benutzer sind.

Beispielsitzungplaying
# Server abonnieren
hotkv> SUBSCRIBE room:42
1) "subscribe"
2) "room:42"
3) (integer) 1

Ein animierter Durchlauf mit echten HotKV-Befehlen und Beispielantworten. Klicken Sie auf einen Schritt, um direkt dorthin zu springen. Befehle und Antworten bleiben auf Englisch, genau so, wie Sie sie in HotKV eingeben und sehen.

Das Problem

Ein Chatraum oder ein Live-Benachrichtigungsfeed muss jeden verbundenen Benutzer gleichzeitig erreichen, über viele WebSocket-Server hinweg. Eine Datenbank abzufragen ist zu langsam und zu teuer, und die Server brauchen einen gemeinsamen Weg, einander mitzuteilen, dass etwas passiert ist.

So löst HotKV es

Jeder WebSocket-Server abonniert die Kanäle, die seine Benutzer interessieren. Wenn etwas passiert, erreicht ein einziges PUBLISH jeden abonnierten Server, der es an seine Benutzer weiterleitet. Geshardete Kanäle halten den Traffic in einem Cluster auf dem Knoten, dem der Kanal gehört, und ein Stream neben jedem Raum bewahrt den Verlauf für Benutzer, die später dazukommen.

Schritt für Schritt

Was passiert, Befehl für Befehl

  1. 01

    Server abonnieren

    Jeder WebSocket-Server abonniert die Räume, in denen seine verbundenen Benutzer sind.

    SUBSCRIBE room:42
  2. 02

    Alice sendet eine Nachricht

    Ihr Server veröffentlicht einmal. Die Antwort gibt an, wie viele Abonnenten sie erhalten haben.

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

    Den Verlauf behalten

    Die Nachricht wird außerdem an den Stream des Raums angehängt, begrenzt auf die letzten 1000 Nachrichten.

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

    Bob verbindet sich später neu

    Er liest die letzten 50 Nachrichten aus dem Stream und geht dann live auf den Kanal.

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

    Geshardete Kanäle im Cluster

    Im Cluster-Modus hält SPUBLISH die Nachricht auf dem Knoten, dem der Kanal gehört.

    SPUBLISH room:{42}:typing "alice"
Wo es passt

Szenarien aus der Praxis

Team-Chat und Support-Chat

Nachrichten verteilen sich an jeden Server, der die Verbindung eines Mitglieds hält, und der Stream liefert Neuankömmlingen den Rückstand.

Live-Benachrichtigungen

Bestellupdates, Erwähnungen und Warnungen werden in dem Moment an den Browser gepusht, in dem sie passieren.

Kollaborative Apps

Cursorpositionen und Tippindikatoren werden auf kurzlebigen Kanälen gesendet.

Integriert

Was Sie bekommen

Fan-out

Ein Publish erreicht jeden Abonnenten.

PUBLISHSUBSCRIBE

Pattern-Abonnements

Abonnieren Sie room:*, um jeden Raum zu empfangen.

PSUBSCRIBE

Geshardetes Pub/Sub

Kanäle bleiben in einem Cluster auf dem Knoten, dem sie gehören.

SPUBLISHSSUBSCRIBE

Verlauf

Koppeln Sie einen Kanal mit einem begrenzten Stream für Nachrichten, die Benutzer verpasst haben.

XADDXREVRANGE

Häufige Fragen

Werden Pub/Sub-Nachrichten gespeichert?

Nein. Pub/Sub stellt an alle zu, die in diesem Moment abonniert haben. Verwenden Sie einen Stream neben dem Kanal, wenn Benutzer einen Verlauf brauchen.

Funktioniert es in einem Cluster?

Ja. Verwenden Sie geshardetes Pub/Sub (SPUBLISH, SSUBSCRIBE), damit der Traffic jedes Kanals auf dem Knoten bleibt, dem er gehört.

Kann ich benachrichtigt werden, wenn sich Keys ändern?

Ja. Keyspace Notifications veröffentlichen Ereignisse für Key-Änderungen. Siehe die Dokumentation zu Keyspace Notifications.

Verwandte Anwendungsfälle

Probieren Sie es mit Ihrer eigenen Workload

HotKV spricht das Redis-Protokoll, sodass Sie einen bestehenden Client darauf richten und genau diese Befehle ausführen können.