KerndataRealtime

Realtime chat en notificaties

Verspreid berichten in realtime naar elke verbonden client, met gesharde kanalen voor clusters en streams voor geschiedenis.

publicatie, elke abonnee
1
kanalen voor clusters
Gesharde
met streams
+geschiedenis
Stap 1 van 5
Servers abonneren zich

Elke WebSocket-server abonneert zich op de rooms waarin zijn verbonden gebruikers zitten.

Voorbeeldsessieplaying
# Servers abonneren zich
hotkv> SUBSCRIBE room:42
1) "subscribe"
2) "room:42"
3) (integer) 1

Een geanimeerde walkthrough met echte HotKV-commando's en voorbeeldantwoorden. Klik op een stap om ernaartoe te springen. Commando's en antwoorden blijven Engels, precies zoals je ze in HotKV typt en ziet.

Het probleem

Een chatroom of live notificatiefeed moet alle verbonden gebruikers tegelijk bereiken, over veel WebSocket-servers heen. Een database pollen is te traag en te duur, en de servers hebben een gedeelde manier nodig om elkaar te vertellen dat er iets is gebeurd.

Hoe HotKV het aanpakt

Elke WebSocket-server abonneert zich op de kanalen waar zijn gebruikers om geven. Wanneer er iets gebeurt, bereikt één PUBLISH elke geabonneerde server, die het doorstuurt naar zijn gebruikers. Gesharde kanalen houden het verkeer op de node die het kanaal bezit in een cluster, en een stream naast elke room bewaart de geschiedenis voor gebruikers die later binnenkomen.

Stap voor stap

Wat er gebeurt, commando voor commando

  1. 01

    Servers abonneren zich

    Elke WebSocket-server abonneert zich op de rooms waarin zijn verbonden gebruikers zitten.

    SUBSCRIBE room:42
  2. 02

    Alice stuurt een bericht

    Haar server publiceert eenmaal. Het antwoord is hoeveel abonnees het ontvingen.

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

    De geschiedenis bewaren

    Het bericht wordt ook toegevoegd aan de stream van de room, begrensd op de laatste 1000 berichten.

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

    Bob verbindt later opnieuw

    Hij leest de laatste 50 berichten uit de stream en gaat daarna live op het kanaal.

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

    Gesharde kanalen in een cluster

    In clustermodus houdt SPUBLISH het bericht op de node die het kanaal bezit.

    SPUBLISH room:{42}:typing "alice"
Waar het past

Praktijkscenario's

Teamchat en supportchat

Berichten worden verspreid naar elke server die de verbinding van een lid vasthoudt, en de stream geeft nieuwkomers de achterstand.

Live notificaties

Orderupdates, vermeldingen en meldingen worden naar de browser gepusht op het moment dat ze plaatsvinden.

Samenwerkingsapps

Cursorposities en typindicatoren worden uitgezonden op kortlevende kanalen.

Ingebouwd

Wat je krijgt

Fan-out

Eén publicatie bereikt elke abonnee.

PUBLISHSUBSCRIBE

Patroonabonnementen

Abonneer je op room:* om elke room te ontvangen.

PSUBSCRIBE

Gesharde pub/sub

Kanalen blijven in een cluster op de node die ze bezit.

SPUBLISHSSUBSCRIBE

Geschiedenis

Koppel een kanaal aan een begrensde stream voor berichten die gebruikers hebben gemist.

XADDXREVRANGE

Veelgestelde vragen

Worden pub/sub-berichten opgeslagen?

Nee. Pub/sub levert af bij wie op dat moment is geabonneerd. Gebruik een stream naast het kanaal als gebruikers geschiedenis nodig hebben.

Werkt het in een cluster?

Ja. Gebruik gesharde pub/sub (SPUBLISH, SSUBSCRIBE) zodat het verkeer van elk kanaal op de node blijft die het bezit.

Kan ik een melding krijgen wanneer sleutels veranderen?

Ja. Keyspace-notificaties publiceren events voor sleutelwijzigingen. Zie de documentatie over keyspace-notificaties.

Verwante use cases

Probeer het op je eigen workload

HotKV spreekt het Redis-protocol, dus je kunt een bestaande client erop richten en dezelfde commando's uitvoeren.