如何从JavaScript数组中删除WebSocket对象?

时间:2016-01-27 16:25:11

标签: 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.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,因为它与先前使用的对象(连接)相同,并且仍然存在于clients数组中的索引0处?

为什么indexOf()在"关闭"中返回-1处理程序?

1 个答案:

答案 0 :(得分:1)

如果您在Node中使用close模块,则WebSocket事件侦听器不会将ws作为其第一个参数。 docs say the first argument is closing code reason,而不是套接字。

相反,您已在外部ws变量中拥有套接字。不要用名为ws的参数来遮蔽它,你的代码应该可以正常工作:

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