php 8.5 本身不支持 websocket 长连接,需借助 workerman 或 swoole 等常驻内存框架实现;workerman 零扩展依赖、兼容性好,swoole 性能更优但需安装扩展;切勿在 nginx/apache 下直接运行 websocket 脚本。

PHP 8.5 本身不支持 WebSocket 长连接,它仍沿用传统请求-响应生命周期。要实现长连接,必须让 PHP 进程脱离 Apache/Nginx+PHP-FPM 模式,转为常驻内存、事件驱动的运行方式。核心不是“配置PHP”,而是“选用并启动一个能承载 WebSocket 的服务框架”。
确认环境基础条件
在动手前,请确保以下三点已满足:
- PHP 8.5 已正确安装,且命令行可执行(
php -v能正常输出) - 服务器防火墙或安全组已放行你计划使用的端口(如 8080、9501 等),注意这些端口不能被 Nginx/Apache 占用
- 无需额外扩展即可运行的方案(如 Workerman)更适配 PHP 8.5;若选 Swoole,需确认其最新稳定版已支持 PHP 8.5(目前 Swoole v5.1+ 已官方兼容)
推荐方案:用 Workerman 快速启用 WebSocket
Workerman 是纯 PHP 实现、零依赖扩展的成熟框架,对 PHP 8.5 兼容性好,适合快速验证和中小项目部署。
- 通过 Composer 安装:
composer require workerman/workerman - 新建
ws_server.php,写入标准 WebSocket 服务代码(监听 0.0.0.0:8080) - 终端执行:
php ws_server.php start(加-d参数可后台运行) - 浏览器用
new WebSocket('ws://your-server-ip:8080')即可连接,无需任何代理或 Nginx 转发
进阶方案:用 Swoole 提升并发与性能
若项目有高并发、低延迟要求(如在线客服、实时协作),Swoole 是更优选择,但需多一步扩展安装。
- 使用宝塔、phpStudy 等一键环境时,在对应 PHP 版本的「扩展管理」中启用 Swoole(注意勾选 WebSocket 支持)
- 手动编译安装需确认:
php --ri swoole显示WebSocket Support => enabled - 创建
swoole_ws.php,使用Swoole\WebSocket\Server类启动服务 - 启动命令同 Workerman:
php swoole_ws.php,它会独占端口、自行处理握手与帧解析
重要提醒:不要尝试“在 Nginx 下直接跑 WebSocket”
Nginx 或 Apache 只能反向代理 WebSocket 流量,不能原生处理。常见错误包括:
- 把 WebSocket 文件放在 web 目录下,用浏览器直接访问
http://xxx/ws_server.php—— 这只会执行一次脚本然后退出,无法维持连接 - 未在 Nginx 配置中添加
Upgrade和Connection头,导致握手失败(状态码 426 或 502) - 误以为开启
ignore_user_abort+while(true)就是长连接 —— 这会迅速耗尽内存,且不遵循 WebSocket 协议
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











