Lista de nombre de usuario de los clientes conectados usando socket io

He creado un cliente de chat con diferentes salas de chat en NodeJS, socketIO y Express. Estoy tratando de mostrar una lista actualizada de usuarios conectados para cada habitación.

¿Hay alguna forma de conectar un nombre de usuario a un objeto para poder ver todos los nombres de usuario cuando lo haga?

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

y luego hacer algo como esto:

 users[0].username 

¿De qué otras formas puedo hacer esto?

Resuelto: Esto es una especie de duplicado, pero la solución no está escrita muy claramente en ninguna parte, así que pensé que la escribí aquí. Esta es la solución del post de Andy Hin a la que respondió mak . Y también los comentarios en este post.

Solo para aclarar un poco las cosas. Si desea almacenar algo en un objeto socket, puede hacer esto:

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

sockets también tiene un método de obtención, por lo que si desea que todos los usuarios lo hagan:

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

Como señaló alessioalex , la API podría cambiar y es más seguro realizar un seguimiento del usuario por su cuenta. Puede hacerlo usando el ID de socket en la desconexión.

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

Hay preguntas similares que te ayudarán con esto:

Socket.IO: ¿cómo obtengo una lista de sockets / clientes conectados?

Crea una lista de Clientes Conectados usando socket.io

Mi consejo es mantenerse al tanto de la lista de clientes conectados, porque nunca se sabe cuándo puede cambiar la API interna de Socket.IO. Entonces, en cada conexión, agregue el cliente a una matriz (o a la base de datos) y en cada desconexión, elimínelo.