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