生产环境稳定运行Swoole4 WebSocket服务需PHP、Swoole、Nginx、域名和HTTPS协同:一、宝塔软件商店安装swoole4并重启PHP,执行php -m | grep swoole验证;二、用composer require topthink/think-swoole集成框架,配置config/swoole.php启用WebSocket并设端口9501,继承Handler实现事件方法,以php think swoole:server start启动;三、Nginx反向代理/wss路径至http://127.0.0.1:9501,严格配置proxy_http_version 1.1及Upgrade/Connection等头,并部署SSL证书;四、确保防火墙仅允127.0.0.1访问9501端口,用lsof检查端口占用并清理冲突进程。

要在生产环境稳定运行 Swoole4 WebSocket 服务,关键不是“装上就行”,而是让 PHP、Swoole、Web 服务器(Nginx)、域名和 HTTPS 四者协同工作。宝塔面板大幅简化了流程,但几个核心环节必须手动确认和微调,否则前端连不上、连接频繁断开、WSS 报错等问题会反复出现。
一、Swoole4 扩展安装与验证(宝塔内完成)
进入宝塔「软件商店」→ 找到你站点所用的 PHP 版本(如 PHP-7.4 或 PHP-8.0)→ 点击「设置」→ 切换到「安装扩展」选项卡 → 勾选 swoole4 → 点击安装。安装完成后务必点击「重启 PHP」。
验证是否生效:在终端执行
php -m | grep swoole若输出 swoole,说明扩展已加载;若无输出,检查是否选错了 PHP 版本,或查看 /www/server/php/{版本号}/etc/php.ini 中是否有 extension=swoole.so 这一行。
二、服务端代码与启动方式(适配 FastAdmin/ThinkPHP)
不建议直接写裸 Swoole Server 脚本,应通过 think-swoole 与框架集成,便于使用模型、配置、日志等能力。
WebSocket 8.18.2 是该协议规范的一个重要迭代版本,主要优化了连接稳定性与数据传输效率。它通过全双工通信机制,允许客户端与服务器在单一长连接上实时交换数据,大幅降低传统 HTTP 轮询的开销。该版本增强了心跳保活、自动重连及二进制帧传输能力,适用于即时通讯、在线游戏及金融行情推送等低延迟场景,为开发者提供更可靠的实时网络交互基础。
- 进入网站根目录(如 /www/wwwroot/yourdomain.com),执行:
composer require topthink/think-swoole - 创建配置文件 config/swoole.php,确保 websocket.enable 设为 true,并指定监听端口(如 9501)
- 在 application/common/library/ 下新建 WSServer.php,继承 \think\swoole\websocket\Handler,实现 onOpen、onMessage、onClose 方法
- 启动命令统一用:
php think swoole:server start(支持热重载,比 php ws_server.php 更可靠)
三、Nginx 反向代理与 WSS 支持(必须配置)
浏览器访问 wss:// 协议时,Nginx 必须完成 TLS 终止,并将升级请求正确透传给 Swoole。宝塔中进入网站「设置」→「反向代理」→ 添加规则:
- 匹配路径:/wss(或你前端 connect 用的路径,如 /)
- 目标 URL:http://127.0.0.1:9501(必须与 swoole.php 配置的端口一致)
- 额外配置中粘贴以下关键头信息:
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
保存后重启 Nginx。注意:该站点必须已申请并部署 SSL 证书(宝塔「SSL」页一键部署即可)。
四、端口与防火墙检查(常被忽略)
Swoole 默认监听的是内网端口(如 9501),它本身不对外暴露,靠 Nginx 代理。但需确保:
- 服务器安全组/防火墙(如宝塔「安全」页面)放行该端口(仅限 127.0.0.1 访问即可,不要开放公网)
- 检查是否被其他进程占用:
lsof -i :9501 或 netstat -tuln | grep 9501 - 若提示 Address already in use,先 kill 掉旧进程:
kill -9 $(lsof -t -i :9501)
做完这四步,前端用 wss://yourdomain.com/wss 就能稳定连接,消息收发、心跳保活、多用户广播都可正常工作。

















