workerman监听端口在启动脚本中通过new worker('协议://ip:端口')指定,如'http://0.0.0.0:8080';多端口需创建多个worker实例,各自独立监听,最后调用worker::runall()统一启动。

监听端口在哪写?
打开你的启动文件(比如 server.php),关键就在 new Worker() 这一行:
-
new Worker('http://0.0.0.0:8080')→ 监听 8080 端口(HTTP) -
new Worker('websocket://0.0.0.0:2346')→ 监听 2346 端口(WebSocket) -
new Worker('tcp://0.0.0.0:5566')→ 监听 5566 端口(纯 TCP)
协议前缀(http、websocket、tcp)决定处理逻辑,IP 和端口号决定谁能连上。必须写 0.0.0.0 才允许外网访问;写 127.0.0.1 就只能本机连。
怎么同时监听多个端口?
不能在一个 Worker 实例里“加端口”,得新建多个 Worker 对象:
- 每个 new Worker(...) 独立监听一个地址+端口
- 各自设置 onMessage、count、name,互不干扰
- 最后统一调用 Worker::runAll() 启动全部
例如:HTTP 服务跑 8080,WebSocket 跑 2346,TCP 内部通信跑 1236 —— 三行 new,三个端口,全生效。
端口配好了但连不上?检查这三点
-
系统防火墙:CentOS 用
firewall-cmd --add-port=2346/tcp,Ubuntu 用ufw allow 2346 - 云服务器安全组:阿里云/腾讯云后台开 TCP 协议,端口范围填 2346/2346(不是只写 2346),授权对象填 0.0.0.0/0(测试期)
-
监听是否真生效:执行
netstat -tuln | grep :2346,确认输出里有 0.0.0.0:2346,不是 127.0.0.1:2346
常见端口配置错误
很多人卡在这几个地方:
- 代码写了
new Worker('tcp://127.0.0.1:8080'),却让前端从公网 IP 去连 → 必然失败 - 安全组开了 8080,但系统防火墙没放行 → 请求根本到不了 PHP 进程
- 复制示例时漏掉协议,写成
new Worker('0.0.0.0:8080')→ 报错,必须带协议头 - 想复用端口(如多个子进程监听同一端口),但没加
$worker->reusePort = true→ 启动报 Address already in use











