特定の部屋にいるクライアントのリストを表示しようとしています。ソケット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や何かをリストアップするための運を持っていない。しかし、それはニックネームを返すようにしたいです。
socket.IO バージョン 1.0 以上をお使いの方は、上記回答が動作しない場合があります。 以下の回答を参考にしてください。 特定の部屋にいるクライアントの一覧を取得する。
ルーム内の全クライアントのソケットオブジェクトを更新するコード
var clients = io.sockets.adapter.rooms['Room Name'].sockets;
//to get the number of clients
var numClients = (typeof clients !== 'undefined') ? Object.keys(clients).length : 0;
for (var clientId in clients ) {
//this is the socket of each client in the room.
var clientSocket = io.sockets.connected[clientId];
//you can do whatever you need with this
clientSocket.emit('new event', "Updates");
}
ほんの少しでいいんです。
socket
を手に入れたら、次のようなプロパティを設定することができます。socket.nickname = 'Earl';
後に、例えばコンソールログで保存プロパティを使用することができます。
console.log(socket.nickname);`」のように設定します。
閉鎖引用符(')が抜けています。
コンソール.log('ユーザがチャットルーム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);
});
これではコンテキストが分からないので、もっと詳しく知りたい場合は、あなたのコードをすべて見る必要があります。
ユーザーコレクションの配列オブジェクトは、以下のように作成できます。
var users = {};
という配列オブジェクトを作成しておけば、サーバ側で接続時に新規ユーザとして追加することができます。
socket.on('new-user', function (username) {
users[username] = username;
});
をループさせることで、ユーザを表示することができます。
クライアント側
var socket = io.connect();
socket.on('connect', function () {
socket.emit('new-user', 'username');
});