ThinkPHP5.0集成Workerman WebSocket連接失敗:如何排查服務(wù)器端及客戶端配置問題?

thinkphp5.0集成workerman websocket連接失敗排查指南

本文針對Thinkphp5.0框架結(jié)合workerman構(gòu)建WebSocket服務(wù),前端JS無法連接的問題,提供詳細的排查步驟。

ThinkPHP5.0集成Workerman WebSocket連接失敗:如何排查服務(wù)器端及客戶端配置問題?

問題描述:用戶使用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';

排查步驟:

  1. 防火墻: 即使端口2222已在寶塔面板中開放,也需仔細檢查服務(wù)器防火墻是否允許外部訪問該端口。

  2. $socket 配置: workercontroller.php 中的 $socket 屬性 websocket://127.0.0.1:2222 只監(jiān)聽本地連接。若需外部訪問,需修改為 websocket://0.0.0.0:2222 或服務(wù)器公網(wǎng)IP地址,修改后重啟Workerman服務(wù)。

  3. 服務(wù)端代碼錯誤: 檢查 onMessage、onConnect、onClose、onError 和 onWorkerStart 方法的實現(xiàn),潛在錯誤可能導(dǎo)致連接失敗或消息處理異常。 務(wù)必檢查錯誤處理機制。

  4. server.php 配置: 確認(rèn) server.php 中的 BIND_MODULE 是否正確指向Workerman控制器所在的模塊。任何配置錯誤都可能導(dǎo)致Workerman無法正常啟動或加載控制器。

  5. ThinkPHP5與Workerman集成: 確保ThinkPHP5框架和Workerman的集成配置正確,檢查 composer.json 文件,確保Workerman依賴已正確安裝和加載。

建議按照以上步驟逐一排查,并提供完整的代碼和錯誤信息以便更有效地分析問題。 $socket 配置和防火墻設(shè)置通常是外部連接失敗的主要原因。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊11 分享