workerman tcp端口配置核心是必须用new worker('tcp://0.0.0.0:port')初始化,禁用127.0.0.1或localhost;否则仅本机可连,外网连接超时,且需同步开放云安全组与系统防火墙。

Workerman TCP端口配置的核心就一条:用 new Worker("tcp://0.0.0.0:PORT") 初始化时直接指定协议和端口,不要等启动后再改。
tcp://0.0.0.0:PORT 是唯一推荐的监听写法
Workerman 不支持像传统 Web 服务那样在配置文件里填端口,端口是协议 URL 的一部分。写成 tcp://127.0.0.1:2345 或 tcp://localhost:2345 都会导致外网连不上——它只监听本机回环,连同服务器上的其他进程都访问不了。
必须用 0.0.0.0 绑定所有网卡,否则 netstat 能看到监听,但 telnet 外网 IP 就超时。
-
tcp://0.0.0.0:2345✅ 正确,全网可连(前提防火墙/安全组放行) -
tcp://127.0.0.1:2345❌ 仅本地可连,调试可用,上线必改 -
tcp://*:2345❌ Workerman 不识别*,会报Invalid address -
tcp://:2345❌ PHP 解析失败,Worker 构造函数直接抛异常
端口被占用或启动失败的典型现象和排查顺序
运行 php server.php start 后提示 “Address already in use” 或静默退出,常见原因不是代码错,而是环境冲突。
- 先执行
netstat -tuln | grep :2345(Linux/macOS)或netstat -ano | findstr :2345(Windows),确认端口是否真被占 - 若被占,Linux 用
lsof -i :2345查 PID,Windows 用tasklist | findstr PID号定位进程 - PHP 自身可能残留:
ps aux | grep php看有没有没 kill 干净的server.php子进程 - Windows 上常见冲突端口:2345、8282、7272 被其他开发工具(如旧版 XAMPP、IDE 内置服务)偷偷占用
阿里云/腾讯云 ECS 上端口不通?90% 卡在安全组
Workerman 进程跑着、netstat 显示监听成功、本地 telnet 127.0.0.1 2345 通——但外网死活连不上,基本就是云平台拦的。
- 阿里云:进【安全组】→【入方向】→ 手动添加规则,协议选
TCP,端口范围填2345/2345(不能只写2345),授权对象填0.0.0.0/0或最小必要 IP 段 - 腾讯云:类似,进【安全组】→【入站规则】→ 添加,协议类型选
TCP,目的端口填2345,源 IP 填0.0.0.0/0 - 别漏系统防火墙:CentOS 7+ 运行
sudo firewall-cmd --query-port=2345/tcp,返回no就得加--add-port=2345/tcp --permanent
多端口共存要建多个 Worker 实例
Workerman 不支持单个 Worker 实例监听多个 TCP 端口。想同时提供命令行服务(2345)和管理接口(2346),必须分开声明:
$worker1 = new Worker('tcp://0.0.0.0:2345');
$worker1->onMessage = function($conn, $data) { /* 处理业务 */ };
<p>$worker2 = new Worker('tcp://0.0.0.0:2346');
$worker2->onMessage = function($conn, $data) { /<em> 处理管理指令 </em>/ };</p><p>Worker::runAll();
</p>
每个实例可独立设 $worker->count,但注意总进程数别超过服务器负载。端口之间无共享状态,需自行用 Redis 或全局变量同步数据。
真正容易被忽略的是:监听地址写错比端口号写错更难排查——因为程序不报错,只是“连得上却没响应”,这种静默失败最耗时间。











