首页 > 解决方案 > 套接字 IO 命名空间不适用于 Express

问题描述

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

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);
}

在我的客户上,我尝试联系,

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

    socket.connect();

    socket.on("connect", () => {
      console.log("connected to socket server");
    });

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

标签: javascriptnode.jsexpresssocket.io

解决方案


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

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

const socket = io('http://localhost/admin', {
  path: '/mypath'
});

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

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

按照以上几行,您的代码应该看起来像..

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

/singular-socket命名空间在哪里/socket,路径在哪里。

试试这个repl


推荐阅读