これはすべて、socket.io ルーム機能を使用すると非常に簡単です。LearnBoost wiki のドキュメントを参照してください。
https://github.com/LearnBoost/socket.io/wiki/Rooms
1 つのソケットで複数の部屋に接続できます。次のコードで簡単なテストをまとめました。
サーバ
io.sockets.on('connection', function(client){
client.on('subscribe', function(room) {
console.log('joining room', room);
client.join(room);
})
client.on('unsubscribe', function(room) {
console.log('leaving room', room);
client.leave(room);
})
client.on('send', function(data) {
console.log('sending message');
io.sockets.in(data.room).emit('message', data);
});
});
クライアント
var socket = io.connect();
socket.on('message', function (data) {
console.log(data);
});
socket.emit('subscribe', 'roomOne');
socket.emit('subscribe', 'roomTwo');
$('#send').click(function() {
var room = $('#room').val(),
message = $('#message').val();
socket.emit('send', { room: room, message: message });
});
Express ルートからのメッセージの送信も非常に簡単です。
app.post('/send/:room/', function(req, res) {
var room = req.params.room
message = req.body;
io.sockets.in(room).emit('message', { room: room, message: message });
res.end('message sent');
});