javascript - 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 并获得相同的结果。
解决方案
您要做的是让 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 命名空间的更多信息。
推荐阅读
- c# - 如何删除串联 linq/lambda 表达式中的冗余执行路径
- java - 从文件中提取段落样本
- ios - 无法将 NSAttributedString 呈现为 PDF 中的 2 列选项卡式项目符号列表
- ios - 通过 MAC 地址或主机名快速从本地设备获取 IP 地址
- reactjs - 纱线错误:无法连接到端点 URL
- c# - 确保 GUI 不会被传入消息锁定
- deep-learning - 如何修复“ValueError:检查目标时出错:预期的 dense_39 有 4 个维度,但得到了形状为 (10, 2) 的数组”?
- spring - Spring 不向 SimpleUrlHandlerMapping 添加拦截器
- c - C 编译器是否保证两个八字节字段结构将在 SysV x64 上作为 INTEGER 传递?
- ssl - SSL 站点给出的通用名称无效