2012-07-24 48 views
21

我創建一個代碼如何在socket.io中配置重新連接?

var socket = new io.connect('http://localhost:8181', { 
    'reconnect': true, 
    'reconnection delay': 500, 
    'max reconnection attempts': 50 
}); 

socket.io連接但當我殺了服務器CTRL + C並重新啓動,重新連接沒有發生。但在客戶端引發斷開連接事件。這可能是什麼原因?

+0

使用默認選項,Socket.IO在我重新啓動服務器時幾乎立即重新連接。您是否嘗試過不設置任何選項並查看會發生什麼? – Brad 2012-07-24 14:26:25

+0

我試過沒有設置任何選項,但重新連接沒有發生 – Dmitro 2012-07-24 15:17:06

回答

0

重新連接延遲太小500ms增加,最多50次重試意味着500 * 50 = 25000ms,這是25秒。如果這無助於在客戶端上設置錯誤事件的超時時間來重新創建套接字對象(錯誤和延遲重試以創建連接之後)。

+4

在插座的文檔。io-client我讀到「我們再次嘗試連接到服務器之前的毫秒數。我們對以下重新連接使用指數退避算法,在每次重新連接嘗試時,此值將相乘(500> 1000> 2000> 4000> 8000)。「所以它會更大,然後25000ms – Dmitro 2012-07-24 18:57:06

9

我意識到這是一個老問題,但我一直有一些與套接字Io重新連接的麻煩,並發現這個帖子在搜索結果高,所以認爲我會貢獻。嘗試究竟哪些事件是使用下面的代碼調試射擊:

# coffeescript. compile if you're writing javascript, obviously. 

socket.on 'connect',-> console.log 'connected' 
socket.on 'reconnect',-> console.log 'reconnect' 
socket.on 'connecting',-> console.log 'connecting' 
socket.on 'reconnecting',-> console.log 'reconnecting' 
socket.on 'connect_failed',-> console.log 'connect failed' 
socket.on 'reconnect_failed',-> console.log 'reconnect failed' 
socket.on 'close',-> console.log 'close' 
socket.on 'disconnect',-> console.log 'disconnect' 

這應該給你更深入地瞭解客戶套接字的狀態。

此外,請嘗試查看您的網絡檢查器的網絡選項卡,以查看它是否正在觸發XHR請求作爲回退。最後,在您的Web控制檯中,嘗試輸入io.sockets並將其展開以查看它是否實際嘗試重新連接。

我遇到了reconnect_failed沒有觸發的問題,並且重新連接計數沒有重置。以下是在github上討論這些問題的鏈接。

reconnection delay - exponential back off not resetting properly

reconnect_failed gets never fired

some potential fixes/workarounds

25

這是一個老問題,但對其他人和我一樣,誰正在尋找如何重新配置​​在socket.io(1.x中)這是一個正確的語法:

var socket = new io.connect('http://localhost:8181', { 
    'reconnection': true, 
    'reconnectionDelay': 1000, 
    'reconnectionDelayMax' : 5000, 
    'reconnectionAttempts': 5 
}); 
5

這是一箇舊的que但在使用v1.4.5時,我有同樣的問題(出於不同的原因)。我的聊天室應用程序工作得很好,但是當我在終端中點擊Ctrl+C時,我的瀏覽器繼續循環並每隔幾秒報告ERR_CONNECTION_REFUSED,直到我關閉它。

更改以前的答案只是給了我一點解決方案。

爲v1.4.5,這是我在我的客戶端的js文件 「VAR插座」 原代碼:

var socket = io(); 

,這裏是解決方案:

var socket = io({ 
     'reconnection': true, 
     'reconnectionDelay': 1000, 
     'reconnectionDelayMax' : 5000, 
     'reconnectionAttempts': 5 
    }); 

很顯然,我可以改變值,如果我想,但重要的一點是,這會導致無止境的重新連接請求。

+0

我遇到同樣的行爲,ERR_CONNECTION_REFUSED在每秒鐘後出現。你能告訴我,如果客戶端重新連接嘗試達到了reconnectionAttempts的給定值,那麼是否有任何事件產生:5?我想在嘗試連接數未建立之後向客戶端顯示消息 – 2017-01-27 15:40:33

+0

此功能未內置。您必須自己創建一條警報,並在指定次數的重新連接嘗試後觸發。 – elmeltone 2017-01-27 17:35:00

+0

嗯,我得到了我的答案,有一個事件名稱「reconnect_failed」,在x次失敗嘗試後引發。 (https://github.com/socketio/socket.io-client/issues/705) – 2017-01-30 08:24:17

相關問題