提问者:小点点

socket.io客户端的命名空间无效


我在最新版本的socket.io上运行,下面的服务器代码和客户端代码运行良好。

   // server 
  const { Server } = require("socket.io"),
  http = require('http');
  const httpserver = http.createServer();
  io.on("connection", async (socket) => {
     socket.on("error", (err) => {
        console.log(err.message);
       });
    socket.on('disconnect', function () {
       console.log('socket disconnect');
    })      
  });   

  const io = new Server(httpserver, {
      cors: { origin: "*", methods: ["GET", "POST"],}
  });
  httpserver.listen(3001, () => {
      console.log('listening on *:3001');
  });


 // client
 import { io, Socket } from "socket.io-client";
 const socket = io('ws://127.0.0.1:3001', {
    transports: ["websocket"]
 });

 socket.on("connect_error", (err) => {
    console.log(`connect_error due to ${err.message}`);
 });

然后我尝试在socket.io//server io. of("设备").on("连接",async(socket)=中使用命名空间

   // client
    const socket = io('ws://127.0.0.1:3001/device', {
        transports: ["websocket"]
    });

运行代码会给我一个错误,说“由于无效的命名空间connect_error”

我不知道哪里出了问题


共1个答案

匿名用户

使用ws://127.0.0.1:3001/device意味着您正在尝试访问名为“/建议”的命名空间,该命名空间在服务器上不存在。

我认为您正在寻找path选项:

const socket = io("ws://127.0.0.1:3001", {
    path: "/device",
    transports: ["websocket"]
});

参考资料:

  • https://socket.io/docs/v4/client-initialization/
  • https://socket.io/docs/v4/client-options/#path
  • https://socket.io/docs/v4/namespaces/