PHP使用Elephant.io连接Socket.IO时服务端连接失败问题咨询
问题原因
核心问题是Socket.IO服务端与elephant.io客户端协议版本不兼容:
- 你服务端安装的是Socket.IO v4.x版本(HTML端引入的socket.io客户端也是v4.2.0,和服务端匹配,所以HTML侧连接正常)
- PHP端elephant.io使用的是
Version2X引擎,该引擎仅支持对接Socket.IO v2.x版本,和v4版本的通信协议不兼容,因此无法建立连接。
解决方案
二选一即可:
方案1:升级elephant.io适配Socket.IO v4(推荐)
- 先升级elephant.io到支持Socket.IO v4的版本(要求elephant.io ≥ v4.2.0),执行composer命令:
composer update elephantio/elephant.io
- 修改
index.php中的引擎引用,将Version2X替换为Version4X,修改后代码如下:
require __DIR__ . '/vendor/autoload.php'; use ElephantIO\Client; use ElephantIO\Engine\SocketIO\Version4X; $client = new Client(new Version4X('http://localhost:9090')); $client->initialize(); $client->emit('send-message', [ 'name' => 'john', 'surname' => 'doe' ]); $client->close();
方案2:降级Socket.IO服务端到v2.x
如果不想调整PHP侧代码,可以将服务端Socket.IO版本降级到v2.x:
- 卸载现有版本,安装v2分支版本:
npm uninstall socket.io npm install socket.io@2.x
- 重启Node.js服务即可,原有PHP、前端代码无需修改。
验证步骤
修改完成后先启动Node.js服务,再运行PHP脚本,查看服务端控制台是否打印连接日志和接收到的消息即可确认是否修复。
内容的提问来源于stack exchange,提问作者OsKyy
相关产品推荐
相关产品推荐

