2017-03-07 12 views
1

我在Node.js上使用'ws',我不確定舊連接被刪除(舊連接斷開連接或空閒連接,這可能是兩個不同的問題)。我是否需要爲這兩種類型手動執行此操作?如何/應該刪除舊的websocket連接?

回答

2

爲此,您需要首先維護服務器端的實時Web套接字連接對象列表。當用戶通過關閉瀏覽器或任何其他方式從Web套接字斷開連接時,您需要從列表中刪除用戶Web套接字連接對象。

服務器端代碼。你可以參考下面的代碼中的成員數組來處理這個。

io.on("connection",function(client) 
{ 
    client.on("join",function(data) 
    { 
    members[membercount] = client; 
    membername[membercount] = data; 
    membercount++; 
    for(var i =0 ;i <members.length;i++) 
    { 
     members[i].emit("message",membername); 
    } 
    }); 
    client.on("messages",function(data) 
    { 
    for(var i =0 ;i <members.length;i++) 
    { 
     if(members[i].id !== client.id) 
     { 
     members[i].emit("message",data); 
     } 
    } 
    }); 
    client.on("disconnect",function(data) 
    { 
    for(var i =0;i<members.length;i++) 
    { 
     if(members[i].id === client.id) 
     { 
     membercount--; 
     members.splice(i,1); 
     membername.splice(i,1); 
     } 
    } 
    for(var i =0 ;i <members.length;i++) 
    { 
     members[i].emit("message",membername); 
    } 
    }); 
}); 

希望這會有所幫助!!!!!

+0

如果客戶端不能很好地斷開連接呢?心跳失敗還是什麼?斷開連接是否仍然被觸發?謝謝! – Bren

+0

由於它是Web套接字,您的節點js框架將會偵聽打開的Web套接字連接。無論何時瀏覽器關閉,它都會通知您的斷開連接回撥方法。您必須通過刪除已關閉的實例來管理斷開連接。希望爲你工作!!!!!!! –