Socket.io客户端提示‘Invalid namespace’错误排查求助
解决Socket.io "Invalid namespace" 错误
核心问题是服务端代码执行顺序错误:在创建Socket.io Server实例之前,就尝试通过io对象注册命名空间/绑定连接事件,此时io尚未初始化,导致命名空间未被正确注册,客户端连接时触发错误。
修正后的服务端代码
// server const {Server} = require("socket.io"), http = require('http'); const httpserver = http.createServer(); // 先创建Socket.io Server实例 const io = new Server(httpserver, { cors: {origin: "*", methods: ["GET", "POST"]} }); // 再注册命名空间并监听连接 io.of("device").on("connection", async (socket) => { socket.on("error", (err) => { console.log(err.message); }); socket.on('disconnect', function () { console.log('socket disconnect'); }) }); httpserver.listen(3001, () => { console.log('listening on *:3001'); });
关键说明
- 原代码中
io.of("device").on("connection")写在了const io = new Server(...)之前,此时io变量未被赋值,命名空间注册逻辑根本没有生效。 - 客户端代码无需修改,保持现有写法即可:
// client import {io, Socket} from "socket.io-client"; const socket = io('ws://127.0.0.1:3001/device', { transports: ["websocket"] }); socket.on("connect_error", (err) => { console.log(`connect_error due to ${err.message}`); });
内容的提问来源于stack exchange,提问作者user824624
相关产品推荐
相关产品推荐

