workerman 5.2.3 中自定义协议适配 gatewayworker 的关键是通过 class_alias 将 app\library\myprotocol 映射到 workerman\protocols\myprotocol,并在 gateway_worker.php 中配置 'protocol' => 'workerman\protocols\myprotocol',同时确保该类实现 protocolinterface 接口的 input、decode、encode 方法。

Workerman 5.2.3 中自定义协议适配 GatewayWorker,核心在于让 Gateway 进程能识别并加载你写的协议类,同时不修改 vendor 下的任何源码。关键不是升级或重写框架,而是通过命名空间映射 + 配置注入的方式完成对接。
确保协议类实现标准接口
你的自定义协议类(比如 app\library\MyProtocol)必须实现 Workerman\Protocols\ProtocolInterface,并完整提供以下三个方法:
- input($buffer):判断当前接收的数据是否已构成完整包,返回包长度(0 表示数据不足,-1 表示非法包)
- decode($buffer):将原始二进制数据解包为 PHP 可处理的结构(如数组)
- encode($data):将业务返回的数据(如数组)序列化为可发送的二进制格式
正确注册协议类到 Workerman 命名空间
GatewayWorker 启动时,会从 Workerman\Protocols\* 下自动加载协议类。但你的类在 app\library 下,所以必须用 class_alias 显式挂载过去:
start_gateway.php 开头、或 Events.php 加载前执行:
class_alias('app\library\MyProtocol', 'Workerman\Protocols\MyProtocol');
⚠️ 注意:不是 Protocols\MyProtocol(旧版写法),Workerman 5.x 统一使用 Workerman\Protocols\ 命名空间。
通过 `dcc-mcp-cli` 命令行工具控制实时 DCC 主机(Maya、Blender、Houdini、Photoshop、3ds Max 以及自定义的 Studio 工具)。 针对 ClawHub、OpenClaw、Cursor、Claude 和支持 shell 的 Agent 主机:验证网关健康状态、列出已注册的 DCC 实例、搜索工具、检查 Schema、调用工具——全程无需直接编写或发送 MCP 请求。 若系统中未安装 `dcc-mcp-cli`,需先征得用户同意,再从 GitHub
配置 gateway_worker.php 指向新协议
打开 config/gateway_worker.php,找到 'gateway' => [...] 配置段,在其中指定协议:
'gateway' => [
// 其他配置...
'protocol' => 'Workerman\Protocols\MyProtocol',
'socket' => 'tcp://0.0.0.0:7272',
],
如果使用 WebSocket 协议扩展(如需兼容浏览器),则协议应设为 Workerman\Protocols\Http 或 Workerman\Protocols\Websocket,自定义协议一般用于 TCP 私有客户端场景。
验证是否生效
启动服务后检查日志或连接行为:
- 若客户端能成功 connect 并收发数据,说明协议加载成功
- 若报错
Class 'Workerman\Protocols\MyProtocol' not found,说明class_alias未执行或路径写错 - 若连接后无响应,重点检查
input()是否正确识别包头/包长,这是最常见的卡点
不需要改 GatewayWorker 源码,也不需要动 vendor/workerman/gateway-worker 里的任何文件。整个过程只涉及应用层代码和配置。










