web-dev-qa-db-ja.com

ソケットioを使用して接続されているクライアントのユーザー名のリスト

NodeJS、socketIO、Expressの異なるチャットルームでチャットクライアントを作成しました。各部屋の接続ユーザーの最新リストを表示しようとしています。

ユーザー名をオブジェクトに接続する方法はありますか?そうすると、すべてのユーザー名を見ることができます:

var users = io.sockets.clients('room')

そして、このような何かをします:

users[0].username

他にどのような方法でこれを行うことができますか?

解決済み:これは一種の重複ですが、解決策はどこにもはっきりと書かれていないので、ここに書き留めると思いました。これは、 mak で答えられた Andy Hin による post の解です。また、この投稿のコメントも。

少しわかりやすくするためです。ソケットオブジェクトに何かを保存する場合は、次の操作を実行できます。

socket.set('nickname', 'Guest');    

ソケットにはgetメソッドもあるため、すべてのユーザーに必要な場合:

for (var socketId in io.sockets.sockets) {
    io.sockets.sockets[socketId].get('nickname', function(err, nickname) {
        console.log(nickname);
    });
}

alessioalex が指摘したように、APIが変更される可能性があり、ユーザーを自分で追跡する方が安全です。これは、切断時にソケットIDを使用して行うことができます。

io.sockets.on('connection', function (socket) { 
    socket.on('disconnect', function() { 
        console.log(socket.id + ' disconnected');
        //remove user from db
    }
});
35
kimpettersen

これに役立つ同様の質問があります:

Socket.IO-接続されているソケット/クライアントのリストを取得するにはどうすればよいですか?

socket.ioを使用して接続済みクライアントのリストを作成

Socket.IOの内部APIがいつ変更されるかわからないため、接続されたクライアントのリストを追跡することをお勧めします。したがって、接続するたびにクライアントをアレイ(またはデータベース)に追加し、切断するたびにクライアントを削除します。

42
alessioalex