Published on

PHP使用webman搭建websocket分布式服务集群

Authors
  • avatar
    Name
    Liant
    Twitter

分布式系统架构示意图

图片

说明:

A:192.168.0.1

B:192.168.0.2

C:192.168.0.3

A、B、C是三台独立的服务器,构成了一个小的集群,运行的代码完全相同,运行httpws服务,下面是针对两种请求场景,说明如何实现分布式部署扩展。

一、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给服务器,客户端浏览器需要自己重连。