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

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

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

在Firefox和Internet Explorer中,一切都非常顺利。

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

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

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

您可以尝试使用以下方法将超时时间缩短为1秒:

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

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

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

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

一些东西:

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

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

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

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