目标是连接到使用 Engine.IO 传输协议(protocol)版本 3 EIO=3
的 socket.io 服务器...由于不确定性,这种 2 个问题合二为一...第一个问题是 socket.io 客户端版本 3.0 可以使用 EIO=3 而不是使用 EIO=4 这是它的基本设置
,第二个问题是我如何处理发送的所有事件服务器而不说明特定事件(这样做的原因是因为我可能不知道事件的名称或根本不期待它)..谢谢
最佳答案
在socket.io中,engine.io
是socket.io的底层协议(protocol)模块,URL中的EIO
参数字面上是“engine.io”的缩写”。
版本 3 engine.io 客户端仅与版本 3 engine.io 服务器通信,并且是 EIO=3 或 EIO=4 与 engine.io 版本进行通信。因此,我认为 3.0 版客户端无法与 4.0 版服务器通信。他们就是这么做的。因此,如果您有 4.0 服务器,则需要 4.0 客户端。
您的服务器可能同时运行 3.0 和 4.0 服务器,并通过某种检测 EIO=x
值的中间件以某种方式将传入的客户端请求定向到正确的服务器。我自己没有尝试过,也没有见过它完成,但使用正确的代码应该是可行的。
至于监听所有事件而不命名它们,有一个socket.io FAQ here这表明socket.io没有内置该功能,但有第三方plug-in (使用中间件)使之成为可能。
仅供引用,这个article讨论 engine.io v4 中所做的重大更改。
还有,这里有一些 prior discussion关于如何在服务器上运行多个版本的 socket.io。
- Socket.io 0.9 及以下版本使用engine.io v2
- Socket.io 版本 1.x 和 2.x 使用 engine.io v3
- Socket.io 版本 3.x 和 4.x 使用 engine.io v4
因为从 socket.io 3.x 到 4.x,engine.io 主要版本没有改变,所以 4.x 服务器可以接受来自 3.x 或 4.x socket.io 客户端的连接,并使用一个兼容性选项,4.x 服务器甚至可以接受来自 v2 socket.io 客户端的连接。请参阅https://socket.io/blog/socket-io-4-release/了解详情。
关于javascript - 有没有办法让 socket.io 客户端版本 3.0 在 javascript 中使用 EIO=3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75522736/