如何从JavaScript数组中删除WebSocket对象?
我目前正在向数组中添加一个WebSocket客户端对象,以便将它(通过索引)与另一个用户信息数组相匹配,以确定哪个用户属于哪个客户端/套接字/会话如何从JavaScript数组中删除WebSocket对象?,javascript,arrays,json,object,websocket,Javascript,Arrays,Json,Object,Websocket,我目前正在向数组中添加一个WebSocket客户端对象,以便将它(通过索引)与另一个用户信息数组相匹配,以确定哪个用户属于哪个客户端/套接字/会话 var users = []; var clients = []; ... wss.on('connection', function connection(ws) { clients.push(ws); var i = clients.indexOf(ws); if(i > -1) { users.p
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对象的一部分插入到“users”数组中。但是,当我试图在连接关闭时删除相同的ws
对象时,-1
将为indexOf(ws)
返回。但它肯定应该返回0
,因为它与以前使用的对象(连接)相同,并且仍然存在于客户机数组的索引0中
为什么indexOf()在“close”处理程序中返回-1?如果在节点中使用
ws
模块,则close
事件侦听器不会将WebSocket
作为其第一个参数。这是电话,不是插座
相反,在外部ws
变量中已经有了套接字。不要使用名为ws
的参数对其进行阴影处理,您的代码应该可以正常工作:
ws.on('close', function(code, message) {
var i = clients.indexOf(ws);
//...
});