Te doy la bienvenida a proyecto online, ahora vas a encontrar la respuesta de lo que estás buscando.
Solución:
Para versiones de socket.io >= 1.0:
Tenga en cuenta que las habitaciones se convirtieron en tipos reales con un .length
property en 1.4, por lo que el método 1.4.x debería ser estable a partir de ahora. Salvo cambios importantes en la API de ese tipo, por supuesto.
Para contar todos los clientes conectados a 'my_room'
:
1.4+:
var room = io.sockets.adapter.rooms['my_room'];
room.length;
1.3.x:
var room = io.sockets.adapter.rooms['my_room'];
Object.keys(room).length;
1.0.x a 1.2.x:
var room = io.adapter.rooms['my_room'];
Object.keys(room).length;
Esto supone que está ejecutando con el adaptador de sala predeterminado en un solo nodo (a diferencia de un clúster). Las cosas son más complicadas si estás en un clúster.
Otros ejemplos relacionados:
-
Cuente todos los clientes conectados al servidor:
var srvSockets = io.sockets.sockets; Object.keys(srvSockets).length;
-
Cuente todos los clientes conectados al espacio de nombres
'/chat'
:var nspSockets = io.of('/chat').sockets; Object.keys(nspSockets).length
Si está utilizando la versión < 1,
var clients = io.sockets.clients(nick.room); // all users from room
Para socket.io 1.4.6, lo que funcionó para mí fue especificar el espacio de nombres además de la sala. Al usar el espacio de nombres predeterminado, puede especificarlo como ['/']
. Por ejemplo, para obtener el número de clientes conectados a la habitación ‘cocina’ en el espacio de nombres predeterminado (nsps), escribiría:
var io = require('socket.io')();
io.nsps['/'].adapter.rooms['kitchen'].length
Advertencia: si nadie se ha unido a una sala, aún no se ha creado, por lo tanto io.nsps['/'].adapter.rooms['kitchen']
regresará undefined
. Si intentas llamar .length
en la cocina indefinida, su aplicación se bloqueará.
Aquí puedes ver las comentarios y valoraciones de los usuarios
Si tienes alguna vacilación y capacidad de medrar nuestro división te sugerimos escribir una crítica y con deseo lo observaremos.