2011-12-12 37 views
5

我是真正的新手,使用Node.js和Socket.io - 如果這是一個愚蠢的問題,請耐心等待。爲什麼Safari和Chrome上的Socket.io連接速度慢

我在Heroku上設置了一個非常基本的dummy來測試Socket.io。您只需點擊一個按鈕,所有連接的瀏覽器就會相應地看到一條消息。當服務器在本地運行時,這非常有效。現在在Heroku上,我看到Safari和Chrome上的連接問題。初始連接延遲約10秒鐘,並且在第一次調用io.connect('http://myapp.heroku.com/')時出現錯誤503。

事情可以在Firefox和Internet Explorer中非常直接地連接。

你可以看到應用程序在這裏行動: http://sprain.ch/socketio/

任何想法什麼可能會導致這樣的問題,以及如何解決它?

+0

我也可以在Firefox中重現行爲。前兩個調用快速返回,但在第三個調用後,它看起來像服務器需要20多秒才能響應。 http://bit.ly/rtGkCD – SuitedSloth

+0

我沒有在Firefox上重現它,但在Chrome上我做到了。似乎有點奇怪,也許這是一個Heroku或什麼的問題。 @sprain您使用的是Socket.IO的哪個版本,以及啓用了哪些傳輸? – alessioalex

+0

我使用Socket.io 0.7。 – sprain

回答

3

有幾件事情:

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

  • 儘量簡單 「io.connect()」,而不是試圖手動指定的URL。無論主機是什麼,SocketIO都有一些非常牢固的內置發現機制用於與本地主機通信。

  • Heroku + Socket.IO(從經驗上講)沒有任何本質上的緩慢,所以它讓我相信在你的代碼中還有其他事情正在發生。如果您可以分享更多,可能會更容易診斷。

此外,您鏈接頁面的FWIW只是有一些文字說「klick me!」並沒有按鈕。

+0

在heroku上運行時,在服務器上配置socket.io是我的解決方案。謝謝!。 –

7

可以減少用於使用「連接超時」參數(其是由默認10秒)第一WebSocket連接超時。

您可以嘗試減少超時1秒使用:

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

這是因爲他們不支持WebSockets的。因此,在使用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的問題,默認端口惱人地不支持它。

+0

Chrome於2009年支持套接字:http://blog.chromium.org/2009/12/web-sockets-now-available-in-google.html – AlienWebguy