NodeJS& Socket.io:Chrome没有加载WebSockets

时间:2010-12-12 04:27:25

标签: google-chrome node.js websocket

Chrome正在加载长轮询,并且加载指示器不会停止。

为什么Chrome不使用WebSockets,如何在使用长轮询时阻止加载指示器旋转?

我正在使用最新的socket.io和nodejs v2.5

-

我第一次连接时,它使用Websocket,但立即断开连接并重新连接xhr-polling。

3 个答案:

答案 0 :(得分:3)

我遇到了类似的问题,我发现有一个socketio cookie覆盖了“xhr-polling”的传输方法。我不知道cookie是如何到达那里的,但删除它就可以了。

这是对查找cookie的行的引用。 https://github.com/LearnBoost/Socket.IO/blob/master/socket.io.js#L1023

答案 1 :(得分:2)

看来socket.io.js有控制它的选项。

  • tryTransportsOnConnectTimeout - 默认值为true
  • rememberTransport - 默认值为true

我相信如果'tryTransportsOnConnectTimeout'设置为'true',那么socket.io将遍历连接上的所有传输机制并使用第一个成功的传输机制。

如果'rememberTransport'设置为'true',则成功的传输将存储在cookie中。

在我的应用程序中,我实现了断开连接时重新连接的逻辑。我发现我必须将上述两个选项都设置为'false',以防止重新回到不需要的传输。出现此问题的原因是断开连接后,服务器可能在任何时候都可用(例如客户端尝试长轮询而不是websockets)。如果发生这种情况,则设置cookie并且后续连接将继续使用不期望的传输。

答案 2 :(得分:0)

我正在使用Chrome 8和WebSockets似乎工作正常。

如果您正在使用socket.io,它应该在长轮询(或永远iframe)之前回退到FlashSockets甚至xhr-multipart。在服务器和客户端上初始化socket.io时检查传输选项。