2015-06-19 69 views
4

我對socket.io很新穎,並且在node/express/socket.io中編寫了我的第一個應用程序。現在,在我的nginx服務器上一切正常。我想將我的應用程序發佈給公衆,但是我擔心它不會適用於很多人。我有幾個朋友測試我的應用程序,一切都很順利(這是一個非常簡單的應用程序)。這是我的擔憂:現在每個連接似乎都使用websockets,這正是我想要的。但是,由於客戶端的奇怪之處,我的應用有時會降級爲「投票」?如果是這樣,socket.io如何決定何時使用輪詢以及何時使用websocket(是基於瀏覽器/版本還是連接或什麼)?我很確定它在可能的情況下使用websocket,但是有沒有一個列表可以將它敲下來「投票」?另外,有沒有一種方法可以通過使用「輪詢」來測試我的應用程序以查看它是否有效?什麼時候socket.io使用輪詢而不是websockets?

我可以發佈代碼,但我認爲這是關於socket.io如何工作的一般性問題。

回答

6

當瀏覽器客戶端不支持webSockets(例如一個非常老的客戶端),或者如果客戶端中有一些代理的時候,客戶端降級到ajax輪詢的唯一時間(假設你的服務器確實支持它)路徑不支持webSockets。

在IE10 +和其他瀏覽器的所有最新版本中都支持webSockets。

所以,實際上,它實際上只是IE8或IE9或行爲不當的代理,您可能無法看到客戶端webSocket支持。

沒有其他條件(除了缺乏支持)將「連接」連接到輪詢。


你可以暫時只能從客戶端連接到告知客戶端,這是唯一允許使用的運輸選項時傳入XHR輪詢的交通方案測試與投票應用程序。


請記住,所有的WebSocket連接開始與被再「升級」到WebSocket協議,如果雙方都同意,所以如果你正在尋找從您的瀏覽器通過網絡跟蹤的HTTP請求,你應該看到每個webSocket連接都以HTTP請求開始 - 這是正常的。而且,在最新版本的socket.io中,它實際上可能會在成功嘗試並切換到實際的webSocket之前使用輪詢傳輸交換一些數據包。

+0

嗨,只強調@ jfriend00提出的一點:在socket.io 1.0+中,默認情況下連接**總是**以幾個HTTP「輪詢」請求開始,但您可以按照[這裏]所述跳過這些內容。 http://stackoverflow.com/a/28240802/4080966)。 –

相關問題