Как правильно управлять несколькими чатами с помощью socket.io? - PullRequest
12 голосов
/ 17 июля 2011

Как правильно управлять несколькими чатами с помощью socket.io?

?

Так что на сервере будет что-то вроде:

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

Теперь это будет нормально работать для одной комнаты, так как она передает сообщение всем, кто подключен. Как вы отправляете сообщения людям, которые находятся в определенных чатах?

Добавить .of ('/ chat / room_name')? Или хранить массив всех в комнате?

Ответы [ 2 ]

19 голосов
/ 17 июля 2011

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
});

С различными сокетами вы можете выборочно отправлять в определенное пространство имен, которое вам нужно.1006 * 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 голосов
/ 17 июля 2011

Обновление: Now.js и Bridge теперь мертвы, см. now.js dead и bridge dead . Socket.io, кажется, принял функцию обратного вызова с v0.9, что является хорошим шагом вперед.

Хотя это не связано непосредственно с Socket.io, Now.js (абстракция более высокого уровня поверх Socket.io) поддерживает группы - http://nowjs.com/doc

У них есть пример чата с несколькими комнатами в их официальном репо здесь: https://github.com/Flotype/now/blob/master/examples/multiroomchat_example/multiroomchat_server.js

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...