为什么Safari和Chrome上的Socket.io连接速度较慢

我是Node.js和Socket.io的真正新手 - 如果这是一个愚蠢的问题,请耐心等待。

我在Heroku上设置了一个非常基本的虚拟来测试Socket.io。 您只需点击一个按钮,所有连接的浏览器就会相应地看到一条消息。 当服务器在本地运行时,这非常有效。 现在在Heroku上,我看到Safari和Chrome上的连接问题。 初始连接延迟了大约10秒,并且在第一次调用io.connect('http://myapp.heroku.com/')出现错误503。

事情与Firefox和Internet Explorer中的非常直接的连接很好地结合在一起。

你可以在这里看到这个应用程序:http://sprain.ch/socketio/

有什么想法可能会导致这个问题,以及如何解决它?


您可以使用“连接超时”参数(默认为10秒)来减少用于第一个WebSocket连接的超时时间。

您可以尝试使用以下方法将超时时间降至1秒钟:

io.connect('http://myapp.heroku.com/',{'connect timeout': 1000});

这是因为他们不支持websocket。 因此,在使用XHR轮询之前,socket.io超时尝试使用websockets,但这可能不符合您的目的(?)。 正如Aashay的帖子中的链接所建议的那样,将此代码添加到server.js或app.js文件中:

io.configure(function () { 
  io.set("transports", ["xhr-polling"]); 
  io.set("polling duration", 10); 
});

但是这与实际使用websockets不是一回事。 例如,在OpenShift.com上,您现在可以通过端口8000连接到您的应用程序,然后它实际上使用websockets,而由于Apache的问题,默认端口恼人地不支持它。


一些东西:

  • 我建议你使用这些设置:http://devcenter.heroku.com/articles/using-socket-io-with-node-js-on-heroku

  • 只需尝试“io.connect()”,而不是尝试手动指定URL。 无论主机是什么,SocketIO都有一些非常牢固的内置发现机制用于与本地主机通信。

  • Heroku + Socket.IO(根据经验)没有什么本质上的缓慢,所以它让我相信你的代码中还有其他的东西。 如果您可以分享更多,可能会更容易诊断。

  • 此外,你链接的FWIW页面只是有一些文字说“klick me!” 并没有按钮。

    链接地址: http://www.djcxy.com/p/63171.html

    上一篇: Why is Socket.io connection slow on Safari and Chrome

    下一篇: Caching Google Places API data locally on Android device for history feature