Socket IO Rooms:获取特定房间的客户端列表

新手上路,请多包涵

我正在尝试显示特定房间中的客户列表。我只想显示他们的用户名,而不是他们的套接字 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 或任何东西。但是希望它返回昵称。

原文由 Taurian 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 662
2 个回答

只是几件事。

  1. 当你有 socket 你可以设置如下属性: socket.nickname = 'Earl'; 稍后在控制台日志中使用保存属性: console.log(socket.nickname);

  2. 您在以下位置缺少结束引号 (‘):

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

  1. 我不完全确定你的循环。

下面是修改后的代码应该可以帮助你一点,还要注意我在下面使用的循环是异步的,这可能会影响你处理数据传输的方式。

 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);
});

为了帮助您更多,我需要查看您的所有代码,因为这没有给我上下文。

原文由 Jacob Squires 发布,翻译遵循 CC BY-SA 4.0 许可协议

在 socket.IO 3.x 中

3.x 版的新功能是 connected 被重命名为 sockets 并且现在是命名空间上的 ES6 Map。 在房间套接字上是一组 ES6 客户端 ID。

 //this is an ES6 Set of all client ids in the room
const clients = io.sockets.adapter.rooms.get('Room Name');

//to get the number of clients in this room
const numClients = clients ? clients.size : 0;

//to just emit the same event to all members of a room
io.to('Room Name').emit('new event', 'Updates');

for (const clientId of clients ) {

     //this is the socket of each client in the room.
     const clientSocket = io.sockets.sockets.get(clientId);

     //you can do whatever you need with this
     clientSocket.leave('Other Room')

}

在 socket.IO 1.x 到 2.x 中

请参考以下答案: Get list of all clients in specific room 。复制如下并进行一些修改:

 const clients = io.sockets.adapter.rooms['Room Name'].sockets;

//to get the number of clients in this room
const numClients = clients ? Object.keys(clients).length : 0;

//to just emit the same event to all members of a room
io.to('Room Name').emit('new event', 'Updates');

for (const clientId in clients ) {

     //this is the socket of each client in the room.
     const clientSocket = io.sockets.connected[clientId];

     //you can do whatever you need with this
     clientSocket.leave('Other Room')
}

原文由 Sony Mathew 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏