thinkphp 5.0.24需通过topthink/think-worker=1.0.*集成workerman,关键步骤包括:指定版本安装、创建server.php入口文件、编写worker控制器(监听0.0.0.0:2346)、开放系统防火墙及云安全组端口,并避免pcntl_signal错误。

ThinkPHP 5.0.24 本身不内置 Workerman,需通过官方适配扩展 topthink/think-worker 手动集成。关键在于版本匹配、服务启动方式和环境配置,不是简单引入就能跑通。
确认版本兼容性
TP5.0.24 必须使用 think-worker 1.0.* 版本,高版本(如 2.0+)不兼容。执行命令时明确指定版本:
-
composer require topthink/think-worker=1.0.* - 若在 Windows 下开发,还需补装:
composer require workerman/workerman-for-win
创建服务入口文件 server.php
放在项目根目录(与 application 同级),内容如下:
#!/usr/bin/env php
<?php define('APP_PATH', __DIR__ . '/application/');
define('BIND_MODULE', 'push/Worker'); // 指向你将要写的控制器
require __DIR__ . '/thinkphp/start.php';注意:该文件路径可自定义,但执行时需确保 APP_PATH 和 BIND_MODULE 指向真实存在的模块和控制器。
编写 Worker 控制器
例如在 application/push/controller/Worker.php 中:
<?php namespace app\push\controller;
use think\worker\Server;
use Workerman\Lib\Timer;
class Worker extends Server
{
protected $socket = 'websocket://0.0.0.0:2346'; // 监听所有网卡,非 127.0.0.1
protected $processes = 1; // 多进程需谨慎,涉及 UID 绑定时建议设为 1
public function onMessage($connection, $data)
{
$connection->send('Hello from TP5 + Workerman');
}
public function onConnect($connection)
{
$connection->send('Connected successfully');
}
}⚠️ 常见错误点:
-
$socket写成127.0.0.1→ 外部无法连接,必须用0.0.0.0 - 端口未开放 → 需同时配置系统防火墙(如 iptables / firewalld)和云服务器安全组(如阿里云/腾讯云)
- 启动时报
pcntl_signal undefined→ 删除vendor/workerman/workerman目录(避免与think-worker内置的 Workerman 冲突)
启动与验证
- 启动服务:
php server.php start -d(加-d后台运行) - 查看是否运行:
php server.php status - 浏览器测试 WebSocket 连接:
ws://你的服务器IP:2346(注意是ws://,不是http://) - 若本地测试,可用 Chrome 控制台执行:
const ws = new WebSocket('ws://127.0.0.1:2346'); ws.onopen = () => ws.send('test'); ws.onmessage = e => console.log(e.data);
不复杂但容易忽略端口和监听地址配置。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











