在ThinkPHP6中引入Workerman 5.2.3必须通过topthink/think-worker扩展桥接,禁用直接composer安装workerman并嵌入控制器;需PHP≥7.4且启用pcntl/posix扩展;WebSocket服务类须继承thinkworkerServer、独立处理连接逻辑,不可调用HTTP组件;统一使用php think worker:server命令启停管理。

在 ThinkPHP6 项目中引入 Workerman 5.2.3,**不能直接用 composer require workerman/workerman 然后塞进控制器里启动**——这是最常见、也最容易导致服务一请求就死的误区。Workerman 是常驻进程,和 TP6 的 HTTP 生命周期完全不兼容,必须作为独立服务运行,再与 TP6 协同分工。
确认 PHP 环境支持
Workerman 5.2.3 要求:
- PHP ≥ 7.4(推荐 8.0+)
- 必须启用
pcntl和posix扩展(Linux/macOS 必需;Windows 不支持生产使用) - 检查命令:
php -m | grep -E "pcntl|posix",缺一则需在php.ini中开启对应扩展
安装官方适配扩展 think-worker
TP6 官方推荐方式是通过 topthink/think-worker 扩展桥接,它封装了启动入口、配置加载和生命周期钩子,避免手动管理 Worker 实例:
- 执行命令:
composer require topthink/think-worker - 安装后自动创建配置文件:
config/worker.php和config/worker_server.php - 该扩展已适配 Workerman 5.x(包括 5.2.3),无需单独装
workerman/workerman
配置 WebSocket 服务类
在 app/controller/ 下新建一个服务类,比如 WebSocket.php:
- 继承
thinkworkerServer - 设置
$socket = 'websocket://0.0.0.0:2346'(端口按需调整) - 重写
onMessage、onConnect等方法,处理连接与消息逻辑 - 不要在其中调用 TP6 的 Request/Response/View 等 HTTP 相关组件——它们在此上下文中不可用
启动与管理服务
使用 TP6 命令行统一管理:
- 启动:
php think worker:server start - 后台守护运行(生产环境):
php think worker:server start -d - 停止:
php think worker:server stop - 查看状态:
php think worker:server status
注意:该命令会读取 worker_server.php 中的 'worker_class' => 'app\controller\WebSocket' 配置,自动实例化并托管 Worker 进程。

















