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;
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+:
1.3.x:
1.0.x to 1.2.x:
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:
Count all clients connected to namespace
'/chat'
:For socket.io v2.0.3, I ended up running a redis server and use socket.io-redis plugin. Then you can do:
code is from https://github.com/socketio/socket.io-redis#redisadapterclientsroomsarray-fnfunction
kevzettler pointed me to socket.io-redis
The other answer for socket.io v2.0.3 from The Lazy Coder didn't work for me, it gave me a list of all connected clients, regardless of the room.
put this in a function and it will give you failsafe to prevent crashing:
In version 1.4.5
If you're using version < 1,
var clients = io.sockets.clients(nick.room); // all users from room
I'm using 1.4.6 and this did the trick: