node.js不会在disconnect事件上发送socket

时间:2012-03-26 08:30:11

标签: node.js socket.io disconnect

当有人连接到节点服务器时,我会保留一个包含所有套接字的数组。 这样我就可以在需要时向所有人广播消息,或者循环用户来计算在线用户的数量等。

所有这一切都正常,但是当一个on disconnect事件被触发时,我的参数中没有收到套接字。 还有另一种方法可以知道哪个套接字刚刚断开连接吗?

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];
   });
});

当然上面的例子不起作用,因为disconnect事件不会给出套接字参数(或任何其他参数)。 那么在插座仍然存在的断开连接之前是否有另一个事件被触发?

阿里

1 个答案:

答案 0 :(得分:23)

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

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];
   });
});

除此之外,您不需要广播套接字阵列,您可以使用房间对套接字进行分组并广播到该房间内的所有套接字。