2010-12-12 70 views
3

Chrome瀏覽器正在加載長輪詢,並且加載指示燈不停止。NodeJS&Socket.io:Chrome瀏覽器未加載WebSockets

爲什麼Chrome不使用WebSockets,以及如何防止加載指示器在使用長輪詢時旋轉?

我使用的是最新的socket.io和V2.5的NodeJS

-

我第一次連接時,它使用的WebSocket,但斷開馬上與XHR輪詢重新連接。

+1

告訴我你的Chrome版本,我告訴你答案:) – 2010-12-12 10:21:55

+0

Chrome 8 - http://cl.ly/3din – 2010-12-15 18:21:56

+0

萬分感謝發佈這個問題!當然還有+1 :) – 2013-10-30 10:47:31

回答

2

我有類似的問題,我發現有一個socketio cookie重寫傳輸方法爲「xhr-polling」。我不知道餅乾如何到達那裏,但刪除它卻有竅門。

這是對查找cookie的行的引用。 https://github.com/LearnBoost/Socket.IO/blob/master/socket.io.js#L1023

+0

我找到了cookie並將其刪除。它仍然不起作用:\ – 2010-12-16 23:18:27

+0

我找到了cookie,將它刪除了,它爲我解決了這個問題。謝謝! – 2010-12-29 05:44:29

+0

刪除cookie解決了這個問題,也是我期待已久的問題,爲什麼地獄websocket從來沒有工作,即使在我最新的鉻30。非常感謝這個答案。 +1 – 2013-10-30 10:48:43

0

我使用的是Chrome 8並且WebSockets顯示工作正常。

如果您使用的是socket.io,則應該在長輪詢(或永遠iframe)之前回退到FlashSockets甚至xhr-multipart。在服務器和客戶端上初始化socket.io時檢查您的傳輸選項。

+0

我在webfaction上使用了兩個不同的子域 - 我能想到的唯一的事情是它回退到輪詢,因爲它認爲它的跨域?可能與webfaction有關。 – 2010-12-15 18:31:33

+0

嘗試設置傳輸強制不輪詢的特定傳輸。 – 2010-12-16 14:04:24

+0

我試着在客戶端的選項中設置它,它仍然與xhr-polling連接。有沒有辦法強制它在服務器上? – 2010-12-16 23:09:41

2

看來socket.io.js有控制這個的選項。

  • tryTransportsOnConnectTimeout - 默認值是true
  • rememberTransport - 默認值是true

我相信,如果 'tryTransportsOnConnectTimeout' 設置爲 '真',那麼socket.io將通過所有的傳輸機制迭代連接並使用成功的第一個。

如果'rememberTransport'設置爲'true',則成功的傳輸將存儲在cookie中。

在我的應用程序中,我實現了斷開連接時重新連接的邏輯。我發現我必須將上述兩個選項都設置爲'false',以防止回落到不希望的交通工具上。發生這個問題是因爲在斷開連接之後,服務器可能在任何時候都可用(而客戶端嘗試長時間輪詢而不是websockets)。如果發生這種情況,cookie將被設置,並且後續連接將繼續使用不需要的傳輸。