7 回答

TA貢獻1946條經(jīng)驗 獲得超4個贊
首先,感謝各位技術(shù)專家提供的答案和思路,?。
實際中我發(fā)現(xiàn)原生Swoole對Cluster并不支持,然后研究了蠻久的SwooleDistributed,但是它需要配合Consul,這個配置也是及其麻煩的,最終都放棄了,選擇了原生支持Cluster的Workman,支持異步MySQL,異步Redis,暫時項目就是用這個,后期也會繼續(xù)跟進Swoole對Cluster的支持。
感謝各位!

TA貢獻1799條經(jīng)驗 獲得超6個贊
謝邀 .
首先說下我自己是沒有搞過ws集群的 , 不過有興趣回答一下 .
一般說來 , 無論是tcp還是ws(當(dāng)然ws本質(zhì)上就是tcp)將信息主動push出去 , 靠的是fd文件描述符 . server1的clientA應(yīng)該是在server1上有自己的文件描述符 , server2的clientB在server2上也有自己的文件描述符 . 這個你應(yīng)該是明白的 .
我認(rèn)為你是可以通過某種方案來確定"ClientA的長鏈接在server1上,clientB的長鏈接在server2上"的 , 比如你可以通過hash或者uid取余這種方式來確定某個用戶將會與某個服務(wù)器建立長鏈接 . 只要這點確定了 , 你就可以將"發(fā)送給clientB的消息"也通過這個方式來落到clientB建立長鏈接的服務(wù)器上 , 然后這會兒你就可以很自然的通過這臺服務(wù)器利用fd將消息push給clientB了.
應(yīng)該會有更好的解決方案 . 關(guān)注.

TA貢獻1783條經(jīng)驗 獲得超4個贊
clientA --> server1 | send msg to clientB
server1 | Find clientB at server2 (hash / radis / broadcast)
server1 | connect server2 as websocket client
server1 --> server2 | msg to clientB from clientA
server2 --> clientB | receive msg from clientA
同服務(wù)器消息 和 不同服務(wù)器消息 結(jié)構(gòu)上應(yīng)該是不同的
類似魔獸跨服務(wù)器消息
[from A:to B:msg] A(server1) => B(server1)
[from A@1:to B@2:msg] A(server1) => B(server2)
- 7 回答
- 0 關(guān)注
- 999 瀏覽
添加回答
舉報