-
确保有三台服务器和可公用的redis服务器
-
确保三台服务器都装了swoole扩展和redis php驱动
-
修改proxy.php中的redis连接地址然后在服务器1 cli模式下 php proxy.php 启动
-
修改message.php 中的prxoy服务器地址和redis连接地址然后在服务器2 cli模式下 php message.php 启动
-
修改message2.php 中的prxoy服务器地址和redis连接地址然后在服务器3 cli模式下 php message2.php 启动
-
把client1.html中的websocekt连接地址修改成message.php监听的地址,然后浏览器打开。在input中输入 login://user1 点击发送
-
把client2.html中的websocket的连接地址修改成message2.php监听的地址,然后浏览器打开。在input中输入 login://user2 点击发送
-
把client2.html中iput中的内容改成 user1::你好呀 点击发送
-
在client1.html中的text就可以看见client2.htm发送过来的内容
websocket服务器为了避免服务器过载,单台服务器的socket的连接数是有限的,当一台服务器的连接数到达上限,扩充websocket服务器是必然的。
实现分布式其实就是要实现websocket服务器之间的消息互通。增加一个转发服务器,所有websocket服务器与其建立连接。当websocket服务器要推送的客户端不是与本机连接的,就将消息推送给转发服务器,转发服务器再把消息转发给客户端所在的websocekt服务器,客户端所在的websocekt服务器收到转发服务器消息后把消息推送给客户端。
client1可向client2或者其他client发送消息,并接收其他client发送的消息.
Redis中保存client连接的信息,给每个用户分配唯一的key,包括链接的哪台服务器,转发服务器定时检测消息服务器,如消息服务器挂掉,由转发服务器清理掉Redis已经挂掉的所有链接(为实现)。
-
Client1给Client2发送一条消息
-
WebSocket1接收到消息,根据key从Redis取出Client2的连接信息,连接在本机,直接推送给Client2,流程结束。
-
如果连接不在本机,把消息推送到转发服务器,由转发服务器把该消息推送给连接所在消息服务器,消息服务器接收消息,推送给Client2。
-
消息发送结束。