1

我有一个可以支持多个聊天室的应用程序。我试图弄清楚当用户关闭浏览器选项卡时如何捕获用户从哪个特定房间断开连接,以便我可以更新有多少用户加入了客户端的房间。目前,似乎只能在全球范围内聆听断开连接。如果我得到断开事件,我可以遍历用户所属的所有房间 via io.sockets.manager.roomClients[socket.id],计算房间中的用户数量io.sockets.clients(room).length并将其发送到每个房间。如果我不确定这个用户离开了那个房间,那么重新计算房间里的人数似乎很愚蠢。

此外,我注意到在断开连接事件中,io.sockets.clients(room)将显示断开连接的用户仍在数组中...我必须设置 2 秒的超时,然后该用户不再在数组中。这是一个已知的问题?他仍然显示disconnected:false,所以我不能去那个属性。

这是我到目前为止所拥有的:

socket.on('disconnect', function(){
  //find all rooms this disconnected user belongs too
  var rooms = io.sockets.manager.roomClients[socket.id];

  for(var room in rooms){
    room = room.replace('/','');
    if(room){
      //rooms tend to keep the count around for a while, needs a timeout before user is removed from room
      setTimeout(function(){
        socket.broadcast.to(room).emit('count', io.sockets.clients(room).length);
      }, 2000);
    }
  }
});
4

0 回答 0