redis pub/sub 聊天
SUBSCRIBE channel [channel ...]???????????? 訂閱給定的一個或多個頻道的信息。
PSUBSCRIBE pattern [pattern ...]???????????? 訂閱一個或多個符合給定模式的頻道。? P表示正則式。 與SUBSCRIBE相比, 就是多了個正則式功能、參數可為正則式。
UNSUBSCRIBE [channel [channel ...]]?? ? 指示客戶端退訂給定的頻道。
PUNSUBSCRIBE [pattern [pattern ...]]???? 指示客戶端退訂所有給定模式。????? P含義同上
PUBLISH channel message???????????????????? ? 將信息 message 發送到指定的頻道 channel 。 向頻道發布消息
- PUBSUB CHANNELS [pattern]????????????????????????????????? 列出活躍的channel;? 其中前兩個是特定的關鍵字, patten才是參數
- PUBSUB NUMSUB [channel-1 ... channel-N]???????? 列出給定channel的訂閱數
- PUBSUB NUMPAT??????????????????????????????????????????????????????? 所有頻道的訂閱總和
notes, channel不需要創建。 只需要訂閱, 訂閱后, 如果沒有該頻道, 會自動創建, 有就加入; 退訂后,訂閱數減1、到0時就"去掉"頻道。
redis在subscribe/psubscribe之后, 該context就只能接受數據或者再 訂閱/退訂 了。不能發送其他的COMMAND,比如pubsub, publish等。
因此對于一個聊天應用的客戶端而言, 需要兩個context:
--------------? 一個context用于subscribe sometopic, 然后不停等待接受其他人發出的消息(包括“自己”發出的);
--------------? 一個context用于publish? sometopic "words..", 用于發出消息。
將發送和接受分開了。
游戲服務器通常有個Gate服務器負責與客戶端的連接、請求/應答的轉發, Gate再負責與后臺的logic/match/auth等服務器通訊。因此,redis的pub/sub功能并不能直接適用于COC的聊天功能。 原因大概有:
1) COC刪游戲、再下載進入, 或者退出公會再加入公會后, 能得到此前一段時間/固定條數的歷史聊天記錄。? 這和pub/sub的定義沖突:pub只保證發給現在已經sub上的。
2)如上的游戲后端設計,gate需要充當客戶端的代理。 客戶端發送文本給gate,gate作為redis-cli 與redis server通訊; 但一個gate只能充當一個客戶端代理; 除非對redis-server進行改造。??????????? 或者聊天服務不通過gate。
總結
以上是生活随笔為你收集整理的redis pub/sub 聊天的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mmorpg 设计
- 下一篇: mysql notes