Que de la prise.io 1.0, le réel accepté enswer n'est pas plus valable.
J'ai donc fait une petite fonction que j'utilise comme une solution temporaire :
function findClientsSocket(roomId, namespace) {
var res = []
, ns = io.of(namespace ||"/"); // the default namespace is "/"
if (ns) {
for (var id in ns.connected) {
if(roomId) {
var index = ns.connected[id].rooms.indexOf(roomId) ;
if(index !== -1) {
res.push(ns.connected[id]);
}
} else {
res.push(ns.connected[id]);
}
}
}
return res;
}
Api pour Aucun espace de noms devient
// 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 pour un espace de noms devient :
// 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') ;
Voir aussi cette question connexe, à qui je donne une fonction qui renvoie les sockets pour une pièce donnée.
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;
}