Каким образом можно управлять несколькими чатами с помощью socket.io?
Каким образом можно управлять несколькими чатами с помощью socket.io?
Итак, на сервере будет что-то вроде:
io.sockets.on('connection', function (socket) {
socket.on('message', function (data) {
socket.broadcast.emit('receive', data);
});
});
Теперь это будет нормально работать в одной комнате, поскольку оно передает сообщение всем, кто подключен. Как вы отправляете сообщения людям, которые находятся в определенных чатах?
Добавить .of('/chat/room_name')?
Или хранить массив в комнате?
Ответы
Ответ 1
Socket.IO v0.7 теперь дает вам один Socket
для каждого пространства имен, которое вы определяете:
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
});
С разными сокетами вы можете выборочно отправлять в нужное пространство имен.
Socket.IO v0.7 также имеет концепцию "комнаты"
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');
});
Источник: http://socket.io/#announcement
Ответ 2
Обновление: и Now.js, и Bridge теперь мертвы, см. now.js dead и мост мертв. Socket.io, похоже, применил функцию обратного вызова с v0.9, что является хорошим шагом вперед.
В то время как это не напрямую связано с Socket.io, Now.js(абстракция более высокого уровня ontop Socket.io) поддерживает группы - http://nowjs.com/doc
У них в своем offocial repo есть пример с несколькими комнатами в чате: https://github.com/Flotype/now/blob/master/examples/multiroomchat_example/multiroomchat_server.js