getting how many people are in a chat room in socket.io


Question

I have this code right now that sets the nick and room:

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});
    });

I wanted to know how I could get how many people are connected to a specific chatroom...like Room.length

client side :

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>");
            });
        });
}

I found this, but it gives undefined:

count = io.rooms[Room].length;
1
36
2/19/2012 8:02:34 PM

Accepted Answer

If you're using version < 1,

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

27
6/26/2014 2:50:14 PM

For socket.io versions >= 1.0:

Note that rooms became actual types with a .length property in 1.4, so the 1.4.x method should be stable from now on.

To count all clients connected to '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 to 1.2.x:

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

This is assuming you're running with the default room adapter on a single node (as opposed to a cluster). Things are more complicated if you're in a cluster.


Other related examples:

  • Count all clients connected to server:

    var srvSockets = io.sockets.sockets;
    Object.keys(srvSockets).length;
    
  • Count all clients connected to namespace '/chat':

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

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon