1

複数のチャット ルームをサポートできるアプリケーションがあります。クライアント側のルームに参加しているユーザーの数を更新できるように、ユーザーがブラウザーのタブを閉じたときに切断された特定のルームをキャプチャする方法を見つけようとしています。現時点では、グローバル レベルで切断をリッスンすることしかできないようです。切断イベントを取得すると、ユーザーが属するすべてのルームを経由してループし、ルーム内のユーザー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