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
}
});
これに役立つ同様の質問があります:
Socket.IO-接続されているソケット/クライアントのリストを取得するにはどうすればよいですか?
socket.ioを使用して接続済みクライアントのリストを作成
Socket.IOの内部APIがいつ変更されるかわからないため、接続されたクライアントのリストを追跡することをお勧めします。したがって、接続するたびにクライアントをアレイ(またはデータベース)に追加し、切断するたびにクライアントを削除します。