第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

分布式websocket,如何讓命中不同服務器的人相互通信?

分布式websocket,如何讓命中不同服務器的人相互通信?

縹緲止盈 2018-09-06 15:30:24
最近接觸到websocket,需求很簡單,利用websocket讓用戶參與一個1v1的小游戲。環(huán)境是分布式部署,且每臺服務器是多進程,web服務器使用nodejs,websocket框架選用了socket.io。遇到的問題:首先,在單服務器調研,在利用nodejs多進程(cluster)時,建立websocket時會出現(xiàn)400報錯,后來發(fā)現(xiàn)了是多進程的問題,用戶訪問服務器時不能保證每次訪問到相同的進程中,所以后臺會報錯"Session ID unknown",可能是socket.io為了保證偶爾有可能會變成long polling,必須保證前后臺要傳遞一個session id,但是每次頁面刷新時,重新發(fā)起websocket應該和上次的刷新前的websocket沒關系了才對,也有可能是socket.io為了保證與服務器重連節(jié)省資源才引入了session id,不知道我的理解對不對。在網(wǎng)上查找了大量的資料,也看了socket.io官網(wǎng)的推薦方案(http://socket.io/docs/using-multiple-nodes/),有兩種:nginx利用配置ip_hash讓用戶每次都連接到固定的進程,沒玩過nginx不太懂。redis看了網(wǎng)上最多的既成的推薦方案也是redis,之前沒有接觸過redis,不知道其運行原理,大概了解之后,發(fā)現(xiàn)他是一個key-value的持久化存儲,與MemCache、mongoDB類似,官網(wǎng)給出的代碼示例:示例很簡單,把請求弄一個適配器轉向到連接redis服務,但是原理是什么樣的呢,共享內存的方案嗎,不太懂所以也沒下手。最后我選用了一個比較傻的方案,在不同的子進程中啟動websocket服務時選用了不同的端口,比如一臺服務器8核,會有8個端口3001-3008,這樣用戶連接某個固定端口時就不會再出現(xiàn)400error了,但是用戶命中到不同的端口后,相互之間如何通信仍然是個問題,這只是單臺服務器實驗,如果是集群,相互通信也是一個問題,而且關鍵是否需要每次用戶都連接到同一個端口和同一臺服務器呢?說到底,還是對websocket了解太少了,希望能在這里得到一點指導和幫助。
查看完整描述

1 回答

?
拉丁的傳說

TA貢獻1789條經(jīng)驗 獲得超8個贊

如果是用 Redis, 我猜測是使用 Redis 的訂閱/發(fā)布功能實現(xiàn),這樣就能很好的解決不同服務器上用戶相互通信的問題。


查看完整回答
反對 回復 2018-10-09
  • 1 回答
  • 0 關注
  • 1417 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號