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

时间:2011-12-12 20:30:39

标签: node.js 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/

有关可能导致此问题的原因以及如何解决问题的任何想法?

3 个答案:

答案 0 :(得分:8)

您可以使用“connect timeout”参数(默认为10秒)减少第一个websocket连接使用的超时。

您可以尝试使用以下方法将超时时间减少到1秒

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

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:3)

一些事情:

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

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

  • 关于Heroku + Socket.IO(从经验来讲)并没有什么本质上的慢,所以它让我相信你的代码中还有其他东西在发生。如果你可以分享更多,可能更容易诊断。

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