thinkphp5.0集成workerman websocket連接失敗排查指南
本文針對Thinkphp5.0框架結(jié)合workerman構(gòu)建WebSocket服務(wù),前端JS無法連接的問題,提供詳細的排查步驟。
問題描述:用戶使用TP5.0.24、PHP 5.6.40和Workerman 3.5.31在linux(寶塔面板)環(huán)境下搭建WebSocket服務(wù),服務(wù)端運行正常,但瀏覽器端JS代碼無法連接,嘗試過127.0.0.1、0.0.0.0和服務(wù)器公網(wǎng)IP均失敗,服務(wù)器2222端口已開放。
代碼示例:
立即學(xué)習(xí)“PHP免費學(xué)習(xí)筆記(深入)”;
服務(wù)端 (workercontroller.php):
<?php namespace apppushcontroller; use thinkworkerserver; class workercontroller extends server { protected $socket = 'websocket://127.0.0.1:2222'; // ... 其他方法 ... }
前端JS代碼:
ws = new WebSocket("ws://47.***.***.57:2222"); // 或 ws://127.0.0.1:2222 // ... 其他代碼 ...
server.php:
#!/usr/bin/env php <?php define('APP_PATH', __DIR__ . '/application/'); define('BIND_MODULE', 'push/Worker'); require __DIR__ . '/thinkphp/start.php';
排查步驟:
-
防火墻: 即使端口2222已在寶塔面板中開放,也需仔細檢查服務(wù)器防火墻是否允許外部訪問該端口。
-
$socket 配置: workercontroller.php 中的 $socket 屬性 websocket://127.0.0.1:2222 只監(jiān)聽本地連接。若需外部訪問,需修改為 websocket://0.0.0.0:2222 或服務(wù)器公網(wǎng)IP地址,修改后重啟Workerman服務(wù)。
-
服務(wù)端代碼錯誤: 檢查 onMessage、onConnect、onClose、onError 和 onWorkerStart 方法的實現(xiàn),潛在錯誤可能導(dǎo)致連接失敗或消息處理異常。 務(wù)必檢查錯誤處理機制。
-
server.php 配置: 確認(rèn) server.php 中的 BIND_MODULE 是否正確指向Workerman控制器所在的模塊。任何配置錯誤都可能導(dǎo)致Workerman無法正常啟動或加載控制器。
-
ThinkPHP5與Workerman集成: 確保ThinkPHP5框架和Workerman的集成配置正確,檢查 composer.json 文件,確保Workerman依賴已正確安裝和加載。
建議按照以上步驟逐一排查,并提供完整的代碼和錯誤信息以便更有效地分析問題。 $socket 配置和防火墻設(shè)置通常是外部連接失敗的主要原因。