- Published on
PHP使用webman搭建websocket分布式服务集群
- Authors
- Name
- Liant
分布式系统架构示意图

说明:
A:192.168.0.1
B:192.168.0.2
C:192.168.0.3
A、B、C是三台独立的服务器,构成了一个小的集群,运行的代码完全相同,运行http
和ws
服务,下面是针对两种请求场景,说明如何实现分布式部署扩展。
一、http分布式
直接部署项目,设置Nginx
代理,无需更改代码
二、websocket分布式
每个项目都有一个注册进程,监听端口为1236
,可以理解为是一个redis
,同时还有gateway
进程和worker
进程,所有项目都可以互相注册到集群内任意一个服务器。修改项目里面的gateway-worker
内的process.php
文件,将每个节点的注册地址都填写上:
// 所有节点的项目都需要修改,这里以192.168.0.1节点举例
'registerAddress'=> ['192.168.0.1:1236','192.168.0.2:1236','192.168.0.3:1236']
'register' => [
'handler' => Register::class,
'listen' => 'text://192.168.0.1:1236',
'count' => 1,
'constructor' => []
]
客户端连接任意节点都能实现给所有用户发送消息,注册进程主要的作用是记录服务器的IP和客户端连接的绑定关系
三、websocket要求
有两种场景:
单工通信:客户端不需要和服务端通信,服务端只做通知,服务器会每25s发一次ping给客户端,默认永远不会断开连接,客户端浏览器需要自己重连。
双工通信:客户端和服务器需要有数据交互,服务器会每25s发一次ping给客户端,客户端也需要每25s发送一次ping给服务器,客户端浏览器需要自己重连。