windows防火墙默认阻止入站tcp连接,即使swoole监听0.0.0.0:9501,也必须手动添加入站规则:在“高级设置”中新建端口规则,选tcp、输入9501、允许连接、勾选专用网络(局域网必需),并验证netstat监听状态及telnet连通性。

监听 0.0.0.0 只解决了服务绑定范围的问题,不代表外部一定能访问。真正卡住连接的,往往是防火墙——它在你没察觉时就把请求拦在了系统门外。
确认 Windows 防火墙已放行对应端口
即使 Swoole 服务监听 0.0.0.0:9501,Windows 防火墙默认会阻止所有入站 TCP 连接。必须手动添加入站规则:
- 打开「Windows Defender 防火墙」→「高级设置」→「入站规则」→「新建规则」
- 选择「端口」→「TCP」→ 输入具体端口号(如 9501)→ 允许连接 → 勾选「域」「专用」「公用」网络(局域网共享需至少勾选「专用」)
- 规则名称建议包含服务名和端口,例如 Swoole HTTP Server - 9501
检查云服务器安全组或路由器端口映射
如果你在阿里云、腾讯云或本地路由器后运行 Swoole 服务,仅开 Windows 防火墙还不够:
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
- 云服务器:登录控制台,进入「安全组」→ 添加入方向规则,协议类型选 TCP,端口范围填 9501(或 9501/9501),源 IP 可设为 0.0.0.0/0(测试用)或限定可信网段
- 家用路由器:若需从外网访问,需在路由器后台开启「端口转发」,将 WAN 口的 9501 映射到内网服务器 IP 的 9501
- 注意:部分运营商封禁了 80、443、23 等常见端口,9501 一般不受限,但可先换用 11111 这类干净端口快速验证是否是端口策略问题
验证监听地址与端口状态是否真实生效
别只信代码里写了 '0.0.0.0',要亲眼确认服务确实在监听通配地址:
- 启动 Swoole 服务后,执行命令:
netstat -ano | findstr :9501 - 查看输出中是否含 0.0.0.0:9501 或 [::]:9501(IPv6),且状态为 LISTENING
- 若只看到 127.0.0.1:9501,说明配置未生效——检查 PHP 代码是否写错,比如误传字符串
"127.0.0.1"或变量未正确覆盖
用 telnet 或 curl 逐层验证连通性
从不同位置发起连接,能快速定位拦截环节:
- 本机测试:
telnet 127.0.0.1 9501→ 应显示 Connected(确认服务本身正常) - 同局域网另一台电脑:
telnet 192.168.x.x 9501→ 成功则说明 Windows 防火墙与本地网络通畅 - 外网访问失败?先用手机连同一 WiFi 测试;若仍失败,再查云安全组或 NAT 映射
- 避免用浏览器直接测,优先用 telnet/curl,因为它们不依赖 HTTP 协议头,能更早暴露 TCP 层问题










