easy-swoole / easyswoole

swoole,easyswoole,swoole framework
https://www.easyswoole.com/
Apache License 2.0
4.75k stars 510 forks source link

如何实现,websocket 分布式部署? #506

Closed nx04 closed 3 years ago

nx04 commented 3 years ago

如果机器A的 fd=1 和 机器B的 fd=1 ,这种情况如何处理,如何发送消息。

sockstack commented 3 years ago

其实需要先维护好登录的用户连接的是哪台服务器,假如:

机器C:x.x.x.1
机器D:x.x.x.2

用户A连接机器C,那么A用户的连接信息是:ip: x.x.x.1 fd: 1 username: A
用户B连接机器D,那么A用户的连接信息是:ip: x.x.x.2 fd: 1 username: B

如果用户C需要给用户A发送消息,那么你服务端需要根据用户A的username:A 去查询用户A到底连的那台服务器,通过查询到是连接机器C,那么,需要把信息转发机器C,然机器C把消息push给用户A,至于怎么转发到不同的机器,这个可以使用消息队列

nx04 commented 3 years ago

OK 我基本了解。

我想做到,ws的入口:wss://testwss.tx.com,假如后面有两台机器,M101=192.168.1.101:9501 ; M102=192.168.1.102:9501;

(1)、用户王磊,通过入口 wss://testwss.tx.com 注册 到了后端机器 M101; (2)、用户张三,通过入口 wss://testwss.tx.com 注册 到了后端机器 M101; (3)、用户李四,通过入口 wss://testwss.tx.com 注册 到了后端机器 M102;

能实现如下:

(1)所有在线用户可以点对点收发消息; (2)同时也能群发消息、接收别人群发消息。

请问一下,要实现如上所描述的,easyswoole 框架有没有现成的解决方案?

nx04 commented 3 years ago

麻烦您尽快回复一下我的问题,谢谢。 @sockstack

nx04 commented 3 years ago

我想做到,ws的入口:wss://testwss.tx.com,假如后面有两台机器,M101=192.168.1.101:9501 ; M102=192.168.1.102:9501;

teg1c commented 2 years ago

websocket 结合 rabbitmq 来做分布式