[英]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.