Socket.io 1.4
Object.keys(io.sockets.sockets);
gibt Ihnen alle angeschlossenen Steckdosen.
Socket.io 1.0
Ab socket.io 1.0 ist die tatsächlich akzeptierte Antwort nicht mehr gültig. Also habe ich eine kleine Funktion erstellt, die ich als vorübergehende Korrektur verwende:
function findClientsSocket(roomId, namespace) {
var res = []
// the default namespace is "/"
, ns = io.of(namespace ||"/");
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 für No Namespace wird
// 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 für einen Namespace wird:
// 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');
Siehe auch diese verwandte Frage , in der ich eine Funktion gebe, die die Sockets für einen bestimmten Raum zurückgibt.
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;
}
Socket.io 0.7
API für keinen Namespace :
var clients = io.sockets.clients();
var clients = io.sockets.clients('room'); // all users from room `room`
Für einen Namespace
var clients = io.of('/chat').clients();
var clients = io.of('/chat').clients('room'); // all users from room `room`
Hinweis: Da die socket.io-API anscheinend fehleranfällig ist und einige Lösungen auf Implementierungsdetails beruhen, kann es eine Frage der Verfolgung der Clients selbst sein:
var clients = [];
io.sockets.on('connect', function(client) {
clients.push(client);
client.on('disconnect', function() {
clients.splice(clients.indexOf(client), 1);
});
});