workerman 5.2.3 支持通过多 worker 实例或 onworkerstart 中动态 listen 同时监听多个自定义协议端口,如 text://0.0.0.0:2015 和 udp://0.0.0.0:2016,需注意 reuseport、防火墙及协议数据自行解析。

可以。Workerman 5.2.3 完全支持自定义协议(如 text://、udp://,或完全私有协议)同时监听多个端口,方式灵活,且不依赖特定协议类型。
直接创建多个 Worker 实例
最常用、最清晰的方式:为每个端口单独 new 一个 Worker,指定自定义协议和地址+端口。
- 每个实例可使用相同或不同协议,例如:
text://0.0.0.0:2015和udp://0.0.0.0:2016 - 监听地址必须是
0.0.0.0(外网可访问)或127.0.0.1(仅本机),不能省略 - 无需额外配置,只要端口未被占用、权限正常,就能并行工作
运行时动态监听(同一进程内新增端口)
适合需要共享内存、跨端口协同的场景,比如一个端口接收指令,另一个端口广播消息。
- 必须在
onWorkerStart回调中调用$inner_worker->listen() - 动态创建的 Worker 不继承父 Worker 的
count,只在当前子进程中生效 - 若多个子进程都要监听同一端口(如都 listen
2016),PHP ≥ 7.0 必须显式设置$inner_worker->reusePort = true,否则报Address already in use
注意事项(尤其针对自定义协议)
自定义协议(如 text://)没有 HTTP 或 WebSocket 的内置解析逻辑,需自行处理收发数据格式,但监听机制完全一致。
- 协议名只是标识,Workerman 底层仍走 socket,所以多端口能力与协议无关
- 防火墙、安全组、SELinux 等系统级限制同样适用——开了哪些端口,就放行哪些端口
- 建议用
netstat -tuln | grep :端口号验证是否真正在0.0.0.0上监听成功
不复杂但容易忽略。











