插件窝 干货文章 ThinkPHP5.0集成Workerman WebSocket连接失败,如何排查?

ThinkPHP5.0集成Workerman WebSocket连接失败,如何排查?

Workerman WebSocket 检查 端口 26    来源:    2025-03-13

在ThinkPHP5.0中集成Workerman WebSocket时,如果遇到连接失败的问题,可以从以下几个方面进行排查:

1. 检查Workerman配置

确保Workerman的配置正确,包括端口号、IP地址等。通常Workerman的配置文件位于config目录下,检查config/worker.php或相关配置文件。

return [
    'websocket' => [
        'ip' => '0.0.0.0',
        'port' => 8080,
    ],
];

2. 检查端口占用

确保Workerman使用的端口没有被其他进程占用。可以使用以下命令检查端口占用情况:

netstat -tuln | grep 8080

如果端口被占用,可以尝试更换端口号。

3. 检查防火墙设置

确保服务器的防火墙允许WebSocket使用的端口通过。可以使用以下命令检查防火墙规则:

sudo ufw status

如果端口被阻止,可以使用以下命令允许端口:

sudo ufw allow 8080/tcp

4. 检查WebSocket客户端连接

确保WebSocket客户端连接时使用的URL和端口正确。例如:

var ws = new WebSocket('ws://your-server-ip:8080');

5. 检查Workerman日志

查看Workerman的日志文件,通常位于runtime/log目录下,检查是否有错误信息。

tail -f runtime/log/workerman.log

6. 检查ThinkPHP路由配置

确保ThinkPHP的路由配置没有影响到WebSocket的连接。可以在route/route.php中添加排除WebSocket路径的路由规则。

Route::any('websocket', function () {
    return 'WebSocket';
})->allowCrossDomain();

7. 检查PHP版本和扩展

确保PHP版本符合Workerman的要求,并且安装了必要的扩展,如pcntlposix等。

php -v
php -m | grep pcntl
php -m | grep posix

8. 检查Workerman启动脚本

确保Workerman的启动脚本正确,并且没有语法错误。可以在命令行中手动启动Workerman,查看是否有错误输出。

php think worker:start

9. 检查WebSocket协议

确保WebSocket客户端和服务器端使用的协议一致。Workerman默认使用ws协议,如果需要使用wss协议,需要配置SSL证书。

$context = [
    'ssl' => [
        'local_cert'  => '/path/to/your/cert.pem',
        'local_pk'    => '/path/to/your/key.pem',
        'verify_peer' => false,
    ]
];
$worker = new Worker('websocket://0.0.0.0:8080', $context);
$worker->transport = 'ssl';

10. 检查网络连接

确保客户端和服务器之间的网络连接正常,没有网络延迟或丢包现象。可以使用ping命令测试网络连接。

ping your-server-ip

通过以上步骤,可以逐步排查ThinkPHP5.0集成Workerman WebSocket连接失败的原因,并找到相应的解决方案。