Socket IO 命名空间不适用于 Express

Mik*_*e K 0 javascript node.js express socket.io

我尝试在后端设置命名空间,

const server = require("http").createServer(app);
const connectedUsers = {};

const io = require("socket.io")(server, {
  path: "/socket",
  serveClient: false,
  // below are engine.IO options
  pingInterval: 10000,
  pingTimeout: 5000,
  cookie: false
});

const singularConnection = io.of("/singular-socket");

singularConnection.on("connection", socket => {
    console.log("unique user connected with socket ID " + socket);
}
Run Code Online (Sandbox Code Playgroud)

在我的客户上,我尝试与,

    const socket = io(GATEWAY, {
      path: "/socket/singular-socket",
      transports: ["websocket"],
      jsonp: false
    });

    socket.connect();

    socket.on("connect", () => {
      console.log("connected to socket server");
    });
Run Code Online (Sandbox Code Playgroud)

我尝试过 URL 的不同变体,删除/socket并移动其他内容,但我似乎无法让它工作。我在这里做错了什么?

Nit*_*mpi 5

我没有任何使用 socket.io 的经验,但是从文档来看......

要连接到命名空间,客户端代码如下所示。

const socket = io('http://localhost/admin', {
  path: '/mypath'
});
Run Code Online (Sandbox Code Playgroud)

在这里,套接字使用自定义路径 mypath连接到管理命名空间。

请求 URL 将如下所示:localhost/mypath/?EIO=3&transport=polling&sid=(命名空间作为有效负载的一部分发送)。

按照上述几行,您的代码应该如下所示:

 const socket = io("http://localhost/singular-socket", {
      path: "/socket",
      transports: ["websocket"],
      jsonp: false
    })
Run Code Online (Sandbox Code Playgroud)

其中/singular-socket是命名空间,/socket是路径。

试试这个回复