35

特定の部屋にいるクライアントのリストを表示しようとしています。ソケットIDではなく、ユーザー名を表示したいだけです。

これは私がいる場所です:

socket.set('nickname', "Earl");  
socket.join('chatroom1');
console.log('User joined chat room 1);

var roster = io.sockets.clients('chatroom1');
for ( i in roster )
{
   console.log('Username: ' + roster[i]);   
}

ソケットIDなどをリストするのに運がありませんでした。ただし、ニックネームを返したいと思います。

4

16 に答える 16

22

objectに深く入り込む代わりに、socket/ioシンプルで標準的な方法を使用できます。

io.in(room_name).clients((err , clients) => {
    // clients will be array of socket ids , currently available in given room
});

詳細についてはお読みください

于 2018-05-10T10:20:43.107 に答える
18

ほんの少しのこと。

  1. 持っているsocket場合は、次のようなプロパティを設定できます。socket.nickname = 'Earl';後で、コンソール ログなどで保存プロパティを使用します。 console.log(socket.nickname);

  2. あなたの中で閉じ引用符( ')がありません:

    console.log('User joined chat room 1);

  3. あなたのループについては完全にはわかりません。

以下は、修正されたコードが少し役立つはずです。また、以下で使用しているループは非同期であり、これがデータ転送の処理方法に影響する可能性があることに注意してください。

socket.nickname = 'Earl';
socket.join('chatroom1');

console.log('User joined chat room 1');
    
var roster = io.sockets.clients('chatroom1');
        
roster.forEach(function(client) {
    console.log('Username: ' + client.nickname);
});

あなたをもっと助けるために、これは私に文脈を与えないので、あなたのすべてのコードを見る必要があります。

于 2013-08-07T06:59:07.777 に答える
2

ソケット.io ^ 2.0

function getRoomClients(room) {
  return new Promise((resolve, reject) => {
    io.of('/').in(room).clients((error, clients) => {
      resolve(clients);
    });
  });
}

...
const clients = await getRoomClients('hello-world');
console.log(clients);

出力

[ '9L47TWua75nkL_0qAAAA',
'tVDBzLjhPRNdgkZdAAAB',
'fHjm2kxKWjh0wUAKAAAC' ]
于 2020-06-01T14:10:13.090 に答える
0

次のようなioオブジェクトでアダプターメソッドを使用できます

io.sockets.adapter.rooms.get("chatroom1")

これにより、特定の部屋で接続されているクライアントのリストが返されます。io.sockets.adapter.rooms これは、ルーム名をキーとしてルームに接続されたすべてのクライアントのマップであり、接続されたクライアントはルーム キーの値です。マップ機能が適用されます。

于 2021-01-01T07:09:54.000 に答える
-3

ユーザーコレクションの配列オブジェクトを次のように作成できます

var users = {};

サーバー側では、接続時に新しいユーザーとして追加できます

socket.on('new-user', function (username) {
    users[username] = username;
});

ユーザーを表示している間、「ユーザー」オブジェクトをループできます

クライアント側

var socket = io.connect();

socket.on('connect', function () {
    socket.emit('new-user', 'username');
});
于 2013-08-07T07:58:00.547 に答える