所以我用 NodeJS + ExpressJS 服务器设置了 socket.io,一切都运行良好。唯一的问题是我刚刚意识到我的 emit()
调用正在使用后备 XHR 方法将事件发送到我的服务器,而不是它打开的 websocket 连接。
当我查看连接时,我看到的只是一些 2probe
、3probe
,然后是通过 websocket 发送的一堆 2 和 3。此连接似乎已打开且正常工作,那么为什么它会退回到使用 XHR 请求进行长轮询?
我现在不提供任何代码,因为我不确定哪个部分是相关的,因为代码的功能方面运行良好,我只想通过 XHR 使用 websocket。有什么想看的代码告诉我
更新
所以我对套接字进行了更多测试,并添加了更多 emit()
调用。似乎最初的 1 或 2 个发射使用长轮询,然后突然切换到使用 websocket。只是好奇这里发生了什么。
最佳答案
从 Socket.IO 1.x 开始,回退算法从降级方法变为升级方法。
长轮询几乎在任何地方都有效,所以一开始就使用它,这样您就可以立即获得“连接”。然后在后台尝试将长轮询连接升级为 websocket 连接。如果升级成功,长轮询停止, session 切换到 websocket 连接。如果不成功,长轮询“连接”保持打开状态并继续使用。
关于node.js - 为什么我的 socket.io 使用长轮询而不是 websocket?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31282578/