11

クライアントが同じ部屋に複数回参加するために送信した場合に何が起こるかを理解しようとしています。これをテストして答えを見つけるために、最初に、同じクライアントが参加のために複数の送信を送信した後、部屋にあるクライアントの数を調べたいと思いました部屋ですが、wiki https://github.com/Automattic/socket.io/wiki/Roomsの部屋の章は古くなっています。「io.sockets.clients('room')」を使おうとすると、「Object # has no method 'clients'」というエラーが表示されます。

そこで、2 つの質問がありました。1. クライアントが同じ部屋に複数回参加しようとするとどうなりますか? 参加しようとするたびに、その部屋のエミットを受け取りますか? 2. ルームにいるクライアントを確認するにはどうすればよいですか?

私はsocket.io v1.0.2を使用しています

4

3 に答える 3

19

socket.io githubでこの質問に対する回答を得ました。

  1. このコード行によるとソケットは一度だけ発行を受け取ります。ソケットがルームに追加されるのは 1 回だけです。同じソケットがルームに参加しようとして別の試みが行われた場合、この試みは無視されます。

  2. 現在、クライアントを取得するための公開 API はなく、#1428でいくつかの議論が進行中です。本当にそれらを取得する必要がある場合は、何らかの理由で、次のように redis アダプターを使用していないと仮定して、アダプターから実際のクライアントを取得できます。

    socket.join('test room');
    var clients = io.sockets.adapter.rooms['test room'];
    console.log(clients);
    for (var clientId in clients) {
      console.log(io.sockets.connected[clientId]);
    }
    
于 2014-05-29T22:08:34.237 に答える
0

Fixed getting clients in a room at socket.io ~1.4.5 like this:

    socket.join('test room');
    var room = io.sockets.adapter.rooms['test room'];
    console.log(room);
    for (var socketId in room.sockets) {
      console.log(io.sockets.connected[socketId]);
    }
于 2016-04-05T14:42:48.350 に答える