Question

J'ai ce code en ce moment qui définit le nick et salle:

io.sockets.on('connection', function(client){
    var Room = "";
    client.on("setNickAndRoom", function(nick, fn){
        client.join(nick.room);
        Room = nick.room;
        client.broadcast.to(Room).emit('count', "Connected:" + " " + count);
        fn({msg :"Connected:" + " " + count});
    });

Je voulais savoir comment je pourrais obtenir combien de personnes sont connectées à un forum de discussion spécifique ... comme Room.length

côté client:

function Chat(){
    this.socket = null;
    this.Nickname = "";
    this.Room = "";
    var synched = $('#syncUp');
    this.Connect = function(nick, room){ 
        socket =  io.connect('http://vybeing.com:8080');    
        Nickname = nick;
        Room = room;
        //conectarse
        socket.on('connect',function (data) {
            socket.emit('setNickAndRoom', {nick: nick, room: room}, function(response){
                $("#connection").html("<p>" + response.msg + "</p>");
            });
        });
}

J'ai trouvé, mais il donne undefined:

count = io.rooms[Room].length;
Était-ce utile?

La solution

Si vous utilisez la version <1,

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

Autres conseils

Pour Socket.IO versions> = 1.0:

Notez que les chambres sont devenues types réels avec une propriété dans .length 1.4, la méthode 1.4.x doit être stable à partir de maintenant.

Pour compter tous les clients connectés à '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 à 1.2.x:

var room = io.adapter.rooms['my_room'];
Object.keys(room).length;

Ceci est en supposant que vous courir avec le adaptateur chambre défaut sur un seul noeud (par opposition à un groupe ). Les choses sont plus compliquées si vous êtes dans un groupe.


D'autres exemples connexes:

  • Comptez tous les clients connectés au serveur:

    var srvSockets = io.sockets.sockets;
    Object.keys(srvSockets).length;
    
  • Comptez tous les clients connectés à l'espace de noms '/chat':

    var nspSockets = io.of('/chat').sockets;
    Object.keys(nspSockets).length
    

Pour socket.io 1.4.6, ce qui a fonctionné pour moi spécifie l'espace de noms, en plus de la salle. Lorsque vous utilisez l'espace de noms par défaut, vous pouvez simplement spécifier comme ['/']. Par exemple, pour obtenir le nombre de clients connectés à la salle « cuisine » dans l'espace de noms de défaut (NSP), vous pouvez écrire:

var io = require('socket.io')();
io.nsps['/'].adapter.rooms['kitchen'].length

L'Enjeu: Si personne n'a rejoint une pièce, il n'a pas encore été créée, donc io.nsps['/'].adapter.rooms['kitchen'] retourneront undefined. Si vous essayez de .length d'appel sur la cuisine undefined votre application se bloque.

Dans la version 1.4.5

var clientNumber = io.sockets.adapter.rooms[room].length;

J'utilise 1.4.6 et cela a fait l'affaire:

Object.keys(io.sockets.connected).length

Je voulais obtenir une liste d'utilisateurs dans une chambre. Cela a fini par être ma solution.

J'ai ajouté une propriété à mon nom d'utilisateur socket, mais pour être complet je changé que pour « id », qui est l'identifiant de la prise.

var sockets = io.in("room_name")
Object.keys(sockets.sockets).forEach((item) => {
  console.log("TODO: Item:", sockets.sockets[item].id)            
})

Socket.io v2.0.3

Pour socket.io v2.0.3, j'ai fini par l'exécution d'un serveur et Redis utiliser le plugin socket.io-Redis. Ensuite, vous pouvez faire:

io.of('/').adapter.clients(['room1', 'room2'], (err, clients) => {
  console.log(clients); // an array containing socket ids in 'room1' and/or 'room2'
});

https://github.com/socketio/socket. io-Redis # redisadapterclientsroomsarray-fnfunction

kevzettler me montra socket.io-Redis


L'autre réponse pour socket.io v2.0.3 de The Lazy Coder n'a pas fonctionné pour moi, il m'a donné une liste de tous les clients connectés, quelle que soit la pièce.

mettre cela en fonction et il vous donnera intrinsèquement sûre pour prévenir s'écraser:

var roomCount = io.nsps['/'].adapter.rooms[roomName];
if (!roomCount) return null;
return roomCount.length;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top