首页 > 解决方案 > Socket.io 客户端初始化似乎没有像记录的那样工作 (4.x)

问题描述

我的 scoket.io 服务器托管在暴露于端点的虚拟化硬件上example.com/<id>/socket.io/

默认情况下,socket.io 会尝试连接,example.com/socket.io/所以我需要自定义使用的端点。根据 4.x 的文档

在上面的示例中,客户端将连接到主命名空间。对于大多数用例来说,仅使用主命名空间就足够了,但您可以使用以下命令指定命名空间:

// same origin version
const socket = io("/admin");
// cross origin version
const socket = io("https://server-domain.com/admin");

所以我去了:

const socket = io("/<id>/socket.io");

并尝试过:

const socket = io("/<id>/socket.io/");

const socket = io("https://example.com/<id>/socket.io");

const socket = io("https://example.com/<id>/socket.io/");

但是失败的轮询消息表明它正在尝试连接到 default https://example.com/socket.io/

我可以验证套接字服务器是否在正确的端点上运行,因为访问https://example.com/<id>/socket.io/提供消息:{"code":0,"message":"Transport unknown"}https://example.com/<id>/socket.io/socket.io.js提供 Socket.IO v4.0.0

我能做些什么来进一步调试或解决这个问题?

编辑:尝试使用 v3 并获得相同的结果。

标签: javascriptnode.jssocket.io

解决方案


您要做的是让 Socket.IO 连接到不同的路径,而不是命名空间。简而言之,您应该使用该path选项,如下所示:

// The string passed as the first argument is the Namespace to use,
// not the path to connect to.
const socket = io("/", {
  // Set the <id> to your actual path ID.
  path: "/<id>/socket.io/"
});

在此处阅读有关 Socket.IO 命名空间的更多信息。


推荐阅读