为了账号安全,请及时绑定邮箱和手机立即绑定

swoole websocket server集群怎么做?

swoole websocket server集群怎么做?

PHP
慕哥9229398 2019-03-06 13:10:19
1,swoole websocket集群如何做到自动轮换,保证可靠性2,swoole websocket server集群中,如何让 server1 的client A 向 server2 的 client B 推送 信息?
查看完整描述

7 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

首先,感谢各位技术专家提供的答案和思路,?。

实际中我发现原生Swoole对Cluster并不支持,然后研究了蛮久的SwooleDistributed,但是它需要配合Consul,这个配置也是及其麻烦的,最终都放弃了,选择了原生支持Cluster的Workman,支持异步MySQL,异步Redis,暂时项目就是用这个,后期也会继续跟进Swoole对Cluster的支持。

感谢各位!

查看完整回答
反对 回复 2019-03-18
  • xlu
    xlu
    基于workerman的GatewayWork动态集群方案值得借鉴,如果基于swoole来个GatewaySwoole就666了
  • xlu
    xlu
    ClientA的长链接在server1上,clientB的长链接在server2上"的,ClientA要发送给clientB消息,只需要知道serverB的host 以及clientB在serverB上的connetion_id就行,没必要hash,一般server会把每个client包装成一个connetion存储起来
  • xlu
    xlu
    ClientA的长链接在server1上,clientB的长链接在server2上"的,ClientA要发送给clientB消息,只需要知道serverB的host 以及clientB在serverB上的connetion_id就行,没必要hash,一般server会把每个client包装成一个connetion存储起来
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

谢邀 .
首先说下我自己是没有搞过ws集群的 , 不过有兴趣回答一下 .
一般说来 , 无论是tcp还是ws(当然ws本质上就是tcp)将信息主动push出去 , 靠的是fd文件描述符 . server1的clientA应该是在server1上有自己的文件描述符 , server2的clientB在server2上也有自己的文件描述符 . 这个你应该是明白的 .

我认为你是可以通过某种方案来确定"ClientA的长链接在server1上,clientB的长链接在server2上"的 , 比如你可以通过hash或者uid取余这种方式来确定某个用户将会与某个服务器建立长链接 . 只要这点确定了 , 你就可以将"发送给clientB的消息"也通过这个方式来落到clientB建立长链接的服务器上 , 然后这会儿你就可以很自然的通过这台服务器利用fd将消息push给clientB了.

应该会有更好的解决方案 . 关注.

查看完整回答
反对 回复 2019-03-18
?
慕村225694

TA贡献1880条经验 获得超4个赞

uid+serverip+fd是否可以实现?

查看完整回答
反对 回复 2019-03-18
?
慕娘9325324

TA贡献1783条经验 获得超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
同服务器消息 和 不同服务器消息 结构上应该是不同的
类似魔兽跨服务器消息
[from A:to B:msg] A(server1) => B(server1)
[from A@1:to B@2:msg] A(server1) => B(server2)
查看完整回答
反对 回复 2019-03-18
  • 7 回答
  • 0 关注
  • 976 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信