Saltar al contenido

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

La guía paso a paso o código que verás en este post es la resolución más sencilla y válida que encontramos a esta inquietud o dilema.

Solución:

En Socket.IO 0.7 tienes un clients método en los espacios de nombres, esto devuelve un array de todos los enchufes conectados.

API sin espacio de nombres:

var clients = io.sockets.clients();
var clients = io.sockets.clients('room'); // all users from room `room`

Para un espacio de nombres

var clients = io.of('/chat').clients();
var clients = io.of('/chat').clients('room'); // all users from room `room`

Espera que esto ayude a alguien en el futuro.

NOTA: Esta solución SOLAMENTE funciona con la versión anterior a la 1.0


ACTUALIZADO 2020 Mar 06

A partir de la versión 1.x y superior, consulte este enlace: obtener cuántas personas hay en una sala de chat en socket.io

Zócalo.io 1.4

Object.keys(io.sockets.sockets); te da todos los enchufes conectados.

Zócalo.io 1.0
A partir de socket.io 1.0, la respuesta aceptada real ya no es válida. Así que hice una pequeña función que uso como solución temporal:

function findClientsSocket(roomId, namespace) 

API para Sin espacio de nombres se convierte

// var clients = io.sockets.clients();
// becomes : 
var clients = findClientsSocket();

// var clients = io.sockets.clients('room');
// all users from room `room`
// becomes
var clients = findClientsSocket('room');

API para un espacio de nombres se convierte en:

// var clients = io.of('/chat').clients();
// becomes
var clients = findClientsSocket(null, '/chat');

// var clients = io.of('/chat').clients('room');
// all users from room `room`
// becomes
var clients = findClientsSocket('room', '/chat');

También vea esta pregunta relacionada, en la que doy una función que devuelve los enchufes para una habitación determinada.

function findClientsSocketByRoomId(roomId) 
var res = []
, room = io.sockets.adapter.rooms[roomId];
if (room) 
    for (var id in room) 
    res.push(io.sockets.adapter.nsp.connected[id]);
    

return res;

Zócalo.io 0.7

API para sin espacio de nombres:

var clients = io.sockets.clients();
var clients = io.sockets.clients('room'); // all users from room `room`

Para un espacio de nombres

var clients = io.of('/chat').clients();
var clients = io.of('/chat').clients('room'); // all users from room `room`

Nota: Dado que parece que la API de socket.io es propensa a romperse, y algunas soluciones se basan en los detalles de implementación, podría ser una cuestión de rastrear a los clientes usted mismo:

var clients = [];

io.sockets.on('connect', function(client) 
    clients.push(client); 

    client.on('disconnect', function() 
        clients.splice(clients.indexOf(client), 1);
    );
);

Después de socket.io 1.0 no podemos usar

io.sockets.clients(); 
or
io.sockets.clients('room'); 

ya no. En su lugar, puede usar lo siguiente

var clients_in_the_room = io.sockets.adapter.rooms[roomId]; 
for (var clientId in clients_in_the_room ) 
  console.log('client: %s', clientId); //Seeing is believing 
  var client_socket = io.sockets.connected[clientId];//Do whatever you want with this

Eres capaz de añadir valor a nuestro contenido informacional tributando tu veteranía en las observaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *