使用Node.js与Socket.io客户端连接指定服务器报404错误如何解决
Socket.IO连接404问题修复方案
以下是针对你问题的具体修复点和可用代码:
问题原因
- 事件使用错误:
connect是Socket.IO内置的连接成功通知事件,仅可通过socket.on('connect')监听,你代码中使用emit方法发送该事件属于逻辑错误,无法用于判断连接状态。 - 连接参数冲突:你使用
http协议填写服务端地址,但配置项中开启了secure: true,该参数会强制客户端走加密的wss协议发起连接,和服务端的HTTP协议不匹配,直接导致请求路径错误返回404。 - 版本不兼容:Socket.IO v2和v3/v4版本的通信协议、默认请求路径存在差异,如果服务端使用v2版本,你本地安装v3/v4版本的客户端就会触发404报错,需要保证客户端和服务端的大版本一致。
- 路径配置不匹配:如果服务端Socket.IO没有使用默认的
/socket.io路径,你需要在客户端连接配置中手动指定path参数匹配服务端设置。
修正后的代码示例
const io = require("socket.io-client"); // 移除冲突的secure参数 const socket = io("http://demo-chat-server.on.ag/", { rejectUnauthorized: false }); // 监听连接成功事件 socket.on("connect", () => { console.log(socket.connected); // 连接成功后输出true }); // 新增连接错误监听,方便排查具体问题 socket.on("connect_error", (err) => { console.log("连接错误:", err); }); socket.on("disconnect", () => { console.log(socket.connected); // 断开后输出false });
额外适配方案
如果修改后仍然返回404,可确认服务端Socket.IO版本,若服务端使用v2版本,执行以下命令降级客户端版本即可:npm install socket.io-client@2
内容的提问来源于stack exchange,提问作者Hande Yildirim
相关产品推荐
相关产品推荐

