What is the proper way to manage multiple chat rooms with socket.io?

Guy guy picture Guy guy · Jul 17, 2011 · Viewed 19.9k times · Source

What is the proper way to manage multiple chat rooms with socket.io?

So on the server there would be something like:

io.sockets.on('connection', function (socket) {
  socket.on('message', function (data) {
    socket.broadcast.emit('receive', data);
  });
});

Now this would work fine for one room, as it broadcasts the message out to all who are connected. How do you send messages to people who are in specific chat rooms though?

Add .of('/chat/room_name')? Or store an array of everybody in a room?

Answer

Sơn Trần-Nguyễn picture Sơn Trần-Nguyễn · Jul 17, 2011

Socket.IO v0.7 now gives you one Socket per namespace you define:

var room1 = io.connect('/room1');
room1.on('message', function () {
    // chat socket messages
});
room1.on('disconnect', function () {
    // chat disconnect event
});

var room2 = io.connect('/room2');
room2.on('message', function () {
    // chat socket messages
});
room2.on('disconnect', function () {
    // chat disconnect event
});

With different sockets, you can selectively send to the specific namespace you would like.

Socket.IO v0.7 also has concept of "room"

io.sockets.on('connection', function (socket) {
  socket.join('a room');
  socket.broadcast.to('a room').send('im here');
  io.sockets.in('some other room').emit('hi');
});

Source: http://socket.io/#announcement