swoole websocket server集群怎么做?
1,swoole websocket集群如何做到自动轮换,保证可靠性
2,swoole websocket server集群中,如何让 server1 的client A 向 server2 的 client B 推送 信息?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
首先你要了解问题的本质是你不在同一个进程空间里(当然在不同的服务器上),你无法直接通讯,因为无法共享tcp连接或无法直接操作相应的tcp连接
现假如你有个集群里面有同样服务的多机子(每天当成一个工作进程):A和B
现在你想A里的某连接(某客户)向B里的某连接(某客户)通讯的思路:
1.前面加个nginx啊,nginx支持websocket反向代理的,同时nginx也支持负载均衡,由nginx决定访问那个服务器
2.消息推送,简单的可以用nsq,需要功能多的就用mq,这两个都很稳定,而且支持集群
我随便回答一下,没做过类似的,就是思考了一下大致想法,不一定正确,肯定还有很多问题
思路:
存储用户会话信息,储存用户ID、server编号、fd
当你要发送给某个用户时,根据用户ID,去查server编号和fd。和指定server通信,指定server再将数据推送给指定fd
uid+serverip+fd是否可以实现?
谢邀 .
首先说下我自己是没有搞过ws集群的 , 不过有兴趣回答一下 .
一般说来 , 无论是tcp还是ws(当然ws本质上就是tcp)将信息主动push出去 , 靠的是fd文件描述符 . server1的clientA应该是在server1上有自己的文件描述符 , server2的clientB在server2上也有自己的文件描述符 . 这个你应该是明白的 .
我认为你是可以通过某种方案来确定"ClientA的长链接在server1上,clientB的长链接在server2上"的 , 比如你可以通过hash或者uid取余这种方式来确定某个用户将会与某个服务器建立长链接 . 只要这点确定了 , 你就可以将"发送给clientB的消息"也通过这个方式来落到clientB建立长链接的服务器上 , 然后这会儿你就可以很自然的通过这台服务器利用fd将消息push给clientB了.
应该会有更好的解决方案 . 关注.
首先,感谢各位技术专家提供的答案和思路,?。
实际中我发现原生Swoole对Cluster并不支持,然后研究了蛮久的SwooleDistributed,但是它需要配合Consul,这个配置也是及其麻烦的,最终都放弃了,选择了原生支持Cluster的Workman,支持异步MySQL,异步Redis,暂时项目就是用这个,后期也会继续跟进Swoole对Cluster的支持。
感谢各位!