Ответ 1
Это все довольно просто с функциями socket.io. Взгляните на документацию по вики LearnBoost.
https://github.com/LearnBoost/socket.io/wiki/Rooms
Он позволяет подключаться к нескольким комнатам по одному разъему. Я собрал быстрый тест со следующим кодом.
Сервер
io.sockets.on('connection', function(socket){
socket.on('subscribe', function(room) {
console.log('joining room', room);
socket.join(room);
})
socket.on('unsubscribe', function(room) {
console.log('leaving room', room);
socket.leave(room);
})
socket.on('send', function(data) {
console.log('sending message');
io.sockets.in(data.room).emit('message', data);
});
});
Client
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 });
});
Отправка сообщения с экспресс-маршрута также довольно проста.
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');
});