6

ルームクライアントの1つが切断されたときに、サーバーがすべてのルームクライアントにメッセージを送信するようにします。

このようなもの:

socket.on('disconnect', function() {
    server.sockets.in(room).emit('bye');
});

だが...

  • どの部屋を放送するかをどうやって知ることができますか?
  • クライアントが複数の部屋に参加している場合はどうなりますか?
4

2 に答える 2

3

ソケットオブジェクトを調べた後、私はこの解決策を思いつきました:

socket.on('disconnect', function() {
    var rooms = io.sockets.manager.roomClients[socket.id];
    for (var room in rooms) {
        if (room.length > 0) { // if not the global room ''
            room = room.substr(1); // remove leading '/'
            console.log('user exits: '+room);
            server.sockets.in(room).emit('bye');
        }
    }
});
于 2012-12-04T16:30:14.410 に答える
0

これで100%ではありませんが、試してみてください:

ルームに接続するとき、またはミックスに新しいユーザーを追加するときは、ユーザー名または ID またはソケット内の何かを覚えておいてください。

socket.on('adduser', function(username){
    socket.username = username;
    socket.join('room');
}

次に、ルームでイベントを残すようにリッスンします。

socket.room.on('leave', function(){
    socket.broadcast.to(this).emit(socket.username + ' says seeya!');
}

とにかく試してみる価値があります-これがうまくいかない場合は、同様のことがうまくいくと確信しています。

于 2013-05-15T20:57:37.813 に答える