node.js在断开连接事件时不发送套接字

当有人连接到节点服务器时,我使用所有套接字保持一个数组。 这样我就可以随时向所有人发送消息,或者通过用户循环来统计在线用户的数量等。

所有这些工作正常,但是当一个断开连接事件被激发,我没有收到我的论点的套接字。 有另一种方法来知道哪个套接字刚刚断开?

var allClients = []; io.sockets.on('connection', function(socket) { allClients.push(socket); socket.on('disconnect', function(socket) { console.log('Got disconnect!'); var i = allClients.indexOf(socket); delete allClients[i]; }); }); 

当然,上面的例子不起作用,因为断开连接事件没有给出一个套接字参数(或任何其他参数)。 那么还有另外一个事件在sockets还在那里断开连接之前被触发了吗?

阿里

您已经拥有套接字,因为断开连接处理程序是在“连接”事件范围内声明的。 尝试删除传递给“disconnect”处理程序的参数,您应该能够使用连接处理程序中的套接字参数。

 io.sockets.on('connection', function(socket) { allClients.push(socket); socket.on('disconnect', function() { console.log('Got disconnect!'); var i = allClients.indexOf(socket); delete allClients[i]; }); }); 

除此之外,你不需要一个套接字arrays来广播,你可以使用房间来分组套接字,并广播到该房间内的所有套接字。