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

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

当我查看连接时,我所看到的只是一些2probe3probe ,然后是一串2和3被发送到websocket。 这个连接看起来是开放的和工作的,那为什么要回到长时间轮询XHR请求呢?

我现在没有提供任何代码,因为我不确定哪个部分是相关的,因为代码的function方面工作很好,我只是想利用XHR上的websocket。 让我知道是否有任何代码你想看到

UPDATE

所以我testing了多一些sockets,并添加了一些更多的emit()调用。 它看起来像第一个1或2发出使用长轮询,然后突然它转换到使用WebSocket。 只是好奇在这里发生了什么。

自从Socket.IO 1.x以来,后备algorithm从降级方法改为升级方法。

长时间的投票在任何地方都非常有效,所以这个function首先被使用,所以你可以马上得到一个“连接”。 然后在后台尝试将长轮询连接升级到websocket连接。 如果升级成功,则长轮询停止,会话切换到WebSocket连接。 如果不成功,长的轮询“连接”保持打开并继续使用。