簡體   English   中英

如何從JavaScript數組中刪除WebSocket對象?

[英]How do I remove a WebSocket object from a JavaScript array?

我目前正在將WebSocket客戶端對象添加到數組中,以便可以(通過索引)將其與另一個用戶信息數組進行匹配,以確定哪個用戶屬於哪個客戶端/套接字/會話。

var users = [];
var clients = [];
...
wss.on('connection', function connection(ws) {

    clients.push(ws);
    var i = clients.indexOf(ws);
    if(i > -1) {
        users.push({
        id: i,
        user: "",
        room: "",
        client: clients[i],
    }); 
    }

    ws.on('close', function(ws) {
        var i = clients.indexOf(ws); //i = -1
        if(i > -1) { 
            // remove this client and user...
        }
    });

    ws.on('message', function incoming(message) {
      // do stuff
    });
});

我可以獲取ws對象的索引(返回0),因此可以將對象作為JSON對象的一部分插入“用戶”數組中。 但是,當我試圖刪除同樣的ws當連接被關閉對象-1被返回indexOf(ws) 但是可以肯定的是,它應該返回0因為它與先前使用的對象(連接)相同,並且仍然存在於客戶數組的索引0處?

為什么indexOf()在“關閉”處理程序中返回-1?

如果您在Node中使用ws模塊,則close事件監聽器不會將WebSocket作為其第一個參數。 文檔說第一個參數是關閉code原因 ,而不是套接字。

相反,您已經在外部ws變量中包含了套接字。 不要使用名為ws的參數對其進行陰影處理,您的代碼應該可以正常工作:

ws.on('close', function(code, message) {
    var i = clients.indexOf(ws);
    //...
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM