KärndataRealtid

Chatt och notiser i realtid

Sprid meddelanden till varje ansluten klient i realtid, med shardade kanaler för kluster och strömmar för historik.

publicering, varje prenumerant
1
kanaler för kluster
Shardade
med strömmar
+historik
Steg 1 av 5
Servrarna prenumererar

Varje WebSocket-server prenumererar på de rum som dess anslutna användare befinner sig i.

Exempelsessionplaying
# Servrarna prenumererar
hotkv> SUBSCRIBE room:42
1) "subscribe"
2) "room:42"
3) (integer) 1

En animerad genomgång med riktiga HotKV-kommandon och exempelsvar. Klicka på valfritt steg för att hoppa dit. Kommandon och svar förblir på engelska, precis som du skriver och ser dem i HotKV.

Problemet

Ett chattrum eller ett livenotisflöde måste nå varje ansluten användare samtidigt, över många WebSocket-servrar. Att polla en databas är för långsamt och för dyrt, och servrarna behöver ett gemensamt sätt att tala om för varandra att något har hänt.

Så löser HotKV det

Varje WebSocket-server prenumererar på de kanaler som dess användare bryr sig om. När något händer når en enda PUBLISH varje prenumererande server, som vidarebefordrar den till sina användare. Shardade kanaler håller trafiken på den nod som äger kanalen i ett kluster, och en ström bredvid varje rum behåller historiken för användare som ansluter senare.

Steg för steg

Vad som händer, kommando för kommando

  1. 01

    Servrarna prenumererar

    Varje WebSocket-server prenumererar på de rum som dess anslutna användare befinner sig i.

    SUBSCRIBE room:42
  2. 02

    Alice skickar ett meddelande

    Hennes server publicerar en gång. Svaret anger hur många prenumeranter som tog emot det.

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

    Behåll historiken

    Meddelandet läggs också till i rummets ström, begränsad till de senaste 1000 meddelandena.

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

    Bob återansluter senare

    Han läser de senaste 50 meddelandena från strömmen och går sedan live på kanalen.

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

    Shardade kanaler i ett kluster

    I klusterläge håller SPUBLISH kvar meddelandet på den nod som äger kanalen.

    SPUBLISH room:{42}:typing "alice"
Där det passar

Verkliga scenarier

Teamchatt och supportchatt

Meddelanden sprids till varje server som håller en medlems anslutning, och strömmen ger nykomlingar eftersläpningen.

Livenotiser

Orderuppdateringar, omnämnanden och varningar skickas till webbläsaren i samma stund som de sker.

Samarbetsappar

Markörpositioner och skrivindikatorer sänds på kortlivade kanaler.

Inbyggt

Det här får du

Utspridning

En publicering når varje prenumerant.

PUBLISHSUBSCRIBE

Mönsterprenumerationer

Prenumerera på room:* för att få varje rum.

PSUBSCRIBE

Shardad pub/sub

Kanaler stannar på den nod som äger dem i ett kluster.

SPUBLISHSSUBSCRIBE

Historik

Para ihop en kanal med en begränsad ström för meddelanden som användare missat.

XADDXREVRANGE

Vanliga frågor

Lagras pub/sub-meddelanden?

Nej. Pub/sub levererar till den som prenumererar i det ögonblicket. Använd en ström bredvid kanalen om användare behöver historik.

Fungerar det i ett kluster?

Ja. Använd shardad pub/sub (SPUBLISH, SSUBSCRIBE) så att varje kanals trafik stannar på den nod som äger den.

Kan jag få besked när nycklar ändras?

Ja. Nyckelrymdsnotiser publicerar händelser för nyckeländringar. Se dokumentationen om nyckelrymdsnotiser.

Relaterade användningsfall

Prova på din egen arbetslast

HotKV talar Redis-protokollet, så du kan peka en befintlig klient mot det och köra samma kommandon.