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

Mat*_*zke 13 node.js socket.io

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

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

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

UPDATE

所以我正在测试插座多一点,我添加了几个emit()电话.看起来第一个1或2个发射器使用长轮询,然后突然转换为使用websocket.只是好奇这里发生了什么.

msc*_*dex 24

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

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