php 使用 gateway-worker 创建websocket 服务器 (双ws架构)
- 项目背景描述, 有这样的需要, 用户端需要显示股票,期货, 加密货币等平台提供的数据, 对接的平台对api的请求是有次数限制的, 所以需要后端弄一个服务做跳板 中继服务器这类的
- 框架以 thinkphp 5.1 为例 php 8.0
- 流程
- composer安装 "workerman/gateway-worker": "^3.1" (主要要跟框架版本兼容)
- 创建 websocket 服务
- 配置nginx 使得前端可以 通过ws 访问
- 守护进程方式启动 (关闭命令行窗口依然可以运行)
以下是步骤2开始
采用的是命令行的方式启动的写法


配置好command

这样就可以通过 命令。 php think itick:ws 启动了。
下面通过gateway-worker 创建websocket 服务 文档 https://www.workerman.net/doc/gateway-worker/ungroup.html

这里配置的eventHandler指向的类用户处理业务逻辑


这样配置好了 Gateway, Business, Register
关键理解点
-
Gateway:就像公司的前台接待员,直接和客户打交道,维持连接
-
Business:就像业务员,不直接见客户,但处理实际业务(订阅逻辑)
-
Register:就像公司通讯录,让前台和业务员能互相找到对方
-
Itick-Client:就像市场调研员,专门从外部获取行情信息 (这里是对接第三方平台的 ,比如股票, 期货 平台 获取他们提供的数据, 然后转发给用户)
-
关系图如下![WeChat1bd96e40254574ef01aa6ebf13ea5972]()
-
![image]()
-
大体的服务创建好之后, 优化 比如心跳, 重连机制, 日志, 错误 等 (把代码交给AI)
- 代码写好了, 开放了安全组对应的端口, 发现用户无法连接上, 最后发现, 需要配置nginx
-
![image]()
- 配置好之后 就可以通过命令行启动了, php think xxx -d (以守护进程方式启动) 需要配置守护进程才行 (不会问AI)
![image]()
- 然后查看是否启动成功
![image]()
- 查看监听端口等
![image]()
- 停止服务
-
- 剩余的自己探索
关系图如下





浙公网安备 33010602011771号