2013-03-13 65 views
2

按照我的previous question的說明,我現在在socket.io中有一組連接用戶。我的問題(我在答案中被警告)是即使在瀏覽器斷開連接之後,套接字仍然保留在這個數組中。測試套接字是否仍然打開

我試圖從socket.on('disconnect'函數中刪除陣列中的套接字,但是在瀏覽器斷開連接並且socket.io觸發斷開連接之間仍有約1分鐘的延遲。

什麼是「測試」一個套接字來查看它是否真的活着的最佳方法?我很想嘗試發送消息並捕獲任何錯誤,但我覺得有一個更優雅的解決方案。

+2

你可以嘗試減少'密切timeout',見http://stackoverflow.com/questions/7192747/socket-io-delay-in-firing-the-disconnect-event,默認是60年代。 – 2013-03-13 20:31:55

回答

0

我在斷開連接處理程序中出錯。最後我用什麼:

socket.on('disconnect', function() { 
    users.splice(users.indexOf(socket), 1); 
}); 
0
socket.on('end',function(){ 
//your code 
}) 

socket.on('error',function(err){ 
//in case of any errors 
}) 

的斷開事件不會火,直到所有的客戶端已經斷開!

0

如何測試是否 「插座仍然是開放的」

if(socket.readyState === socket.OPEN) 
{ 
} 

爲什麼它的工作原理解決方案:

的readyState =連接的當前狀態;這是一個就緒狀態 常量。只讀。

「就緒狀態常量」
連接0:連接尚未打開。
OPEN 1:連接已打開並準備好進行通信。
CLOSING 2:連接處於關閉過程中。
CLOSED 3:連接已關閉或無法打開。

https://developer.mozilla.org/en-US/docs/Web/API/WebSocket