【转】分布式websocket服务器
最近在開(kāi)發(fā)一個(gè)游戲的客服系統(tǒng),同一時(shí)間咨詢問(wèn)題的玩家多,為了保證服務(wù)器高可用,需要利用分布式,另外服務(wù)器宕機(jī)還需要玩家無(wú)感知重連,最關(guān)鍵的一點(diǎn)是如何實(shí)現(xiàn)服務(wù)器的高擴(kuò)展性,即性能不足時(shí),如何以最少的代價(jià)增加一臺(tái)新的服務(wù)器。
1.單臺(tái)websocket
單臺(tái)消息互傳實(shí)現(xiàn)十分簡(jiǎn)單,通過(guò)websocket中轉(zhuǎn)就可以了,不再多加贅述。
2.多臺(tái)websocket
當(dāng)客戶端不在同一臺(tái)服務(wù)器上時(shí),如何實(shí)現(xiàn)消息互通?
一開(kāi)始的時(shí)候,我是想著把server A 與 server B 通過(guò)websocket連接起來(lái),互發(fā)消息,這種方案在服務(wù)器數(shù)量小的時(shí)候,維護(hù)起來(lái)也不算麻煩。
例如增加server C 就要把 A、B、C連起來(lái),但是每增加一臺(tái)服務(wù)器,工作量指數(shù)級(jí)增長(zhǎng),還要考慮到服務(wù)器宕機(jī)、服務(wù)器心跳的各種問(wèn)題,想想都頭疼。
3.多臺(tái)websocket消息推送
這下舒服了。
1.使用全局redis存儲(chǔ)客戶端與服務(wù)端的關(guān)系;
2.webscoket服務(wù)器各自訂閱不同的消息隊(duì)列。
發(fā)消息流程:
情況一:
clientA 給 clientB 發(fā)消息時(shí),先從緩存中讀取clientB在哪個(gè)服務(wù)器上,發(fā)現(xiàn)clientA 與clientB 在同一服務(wù)器時(shí),消息直接發(fā)送至clientB
情況二:
clientB 給 clientC 發(fā)消息時(shí),從緩存中讀到clientC和clientB并不在同一服務(wù)器上,例如clientC在wsB,那么clientB將消息發(fā)送到rabbitmq隊(duì)列B,然后rabbitmq推送到wsB,wsB給clientC發(fā)送消息。
4.總結(jié)
5.改進(jìn)
壓縮消息,節(jié)省帶寬。推薦使用google的protobuf,就是穩(wěn)。
總結(jié)
以上是生活随笔為你收集整理的【转】分布式websocket服务器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 每满299减50!京东运动户外各类大额神
- 下一篇: 蓝戟偷跑Intel Arc A770旗舰