核心資料即時

即時聊天與通知

即時將訊息廣播給每個已連線的用戶端,叢集使用分片頻道,歷史記錄則使用串流。

次發布,送達每位訂閱者
1
適用於叢集的頻道
分片
搭配串流
+歷史記錄
步驟 1 / 5
伺服器進行訂閱

每台 WebSocket 伺服器訂閱其已連線的使用者所在的聊天室。

範例工作階段playing
# 伺服器進行訂閱
hotkv> SUBSCRIBE room:42
1) "subscribe"
2) "room:42"
3) (integer) 1

以真實 HotKV 指令與範例回覆呈現的動畫導覽。點擊任一步驟即可跳到該步驟。 指令與回覆維持英文,與您在 HotKV 中輸入及看到的完全一致。

問題

聊天室或即時通知動態必須同時送達每位已連線的使用者,橫跨許多 WebSocket 伺服器。輪詢資料庫既太慢又太貴,而這些伺服器需要一種共用的方式,彼此通知有事發生。

HotKV 如何處理

每台 WebSocket 伺服器訂閱其使用者關心的頻道。只要有任何事發生,一次 PUBLISH 就能送達每台已訂閱的伺服器,再由它轉發給自己的使用者。分片頻道在叢集中把流量留在擁有該頻道的節點上,而每個聊天室旁的串流則為後來加入的使用者保存歷史記錄。

逐步說明

逐個指令看看發生了什麼事

  1. 01

    伺服器進行訂閱

    每台 WebSocket 伺服器訂閱其已連線的使用者所在的聊天室。

    SUBSCRIBE room:42
  2. 02

    Alice 傳送訊息

    她的伺服器只發布一次。回覆的內容是有多少訂閱者收到了。

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

    保存歷史記錄

    訊息同時也附加到聊天室的串流,最多保留最近的 1000 則訊息。

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

    Bob 稍後重新連線

    他從串流讀取最後 50 則訊息,然後在頻道上切換為即時。

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

    叢集中的分片頻道

    在叢集模式下,SPUBLISH 會把訊息留在擁有該頻道的節點上。

    SPUBLISH room:{42}:typing "alice"
適用之處

真實世界的情境

團隊聊天與客服聊天

訊息會廣播到每台持有成員連線的伺服器,而串流則讓新加入者看到先前的內容。

即時通知

訂單更新、提及與警示會在發生的當下推送到瀏覽器。

協作應用程式

游標位置與輸入中的指示,透過短暫存在的頻道廣播。

內建

您能獲得什麼

廣播

一次發布就能送達每位訂閱者。

PUBLISHSUBSCRIBE

模式訂閱

訂閱 room:* 即可接收每個聊天室。

PSUBSCRIBE

分片發布/訂閱

在叢集中,頻道會留在擁有它的節點上。

SPUBLISHSSUBSCRIBE

歷史記錄

將頻道搭配有上限的串流,保存使用者錯過的訊息。

XADDXREVRANGE

常見問題

發布/訂閱的訊息會被儲存嗎?

不會。發布/訂閱只送給當下正在訂閱的對象。如果使用者需要歷史記錄,請在頻道旁搭配串流。

它能在叢集中運作嗎?

可以。請使用分片發布/訂閱 (SPUBLISH、SSUBSCRIBE),讓每個頻道的流量留在擁有它的節點上。

鍵變動時能收到通知嗎?

可以。鍵空間通知會為鍵的變動發布事件。請參閱鍵空間通知的文件。

相關使用情境

在您自己的工作負載上試試看

HotKV 支援 Redis 協定,因此您可以將現有的用戶端指向它,並執行這些相同的指令。