为什么我的socket.io使用长轮询而不是websocket?

时间:2015-07-08 02:35:04

标签: node.js socket.io

所以我用NodeJS + ExpressJS服务器设置了socket.io,一切运行良好。唯一的问题是我刚刚意识到我的emit()调用正在使用回退XHR方法将事件发送到我的服务器,而不是它已打开的websocket连接。

当我查看连接时,我看到的只有一些2probe3probe,然后是一堆2和3并通过websocket发送。这个连接似乎是开放的并且正常工作,那么为什么它会回退到使用XHR请求的长轮询?

我现在没有提供任何代码,因为我不确定哪个部分是相关的,因为代码的功能方面工作得很好,我只想在XHR上使用websocket。如果您有任何想要查看的代码,请告诉我

更新

所以我稍微测试了套接字,并添加了几个emit()个调用。看起来第一个1或2个发射器使用长轮询,然后突然转换为使用websocket。只是好奇这里发生了什么。

1 个答案:

答案 0 :(得分:20)

从Socket.IO 1.x开始,后备算法从降级方法变为升级方法。

长时间轮询几乎可以在任何地方使用,因此首先使用它,以便您可以立即获得“连接”。然后在后台尝试将长轮询连接升级为websocket连接。如果升级成功,则长轮询停止,会话切换到websocket连接。如果不成功,则长轮询“连接”保持打开状态并继续使用。