2

Я создаю приложение с некоторыми функциями реального времени (уведомления, комментарии в реальном времени, ... и, конечно же, классический чат). Он структурирован как одностраничное приложение. Я использую page.js для обработки маршрутов, require.js и, на данный момент, простой пользовательский фреймворк mvc. Backend с узлом и socket.io для поддержки в реальном времени.Отдельные слушатели в одностраничном приложении с socket.io

Дело в том, что у меня разные разделы, например, дома, сообщения, чат. Каждый раздел динамически отображается на основе маршрутов. Теперь, как мне связать определенные события сокета для каждого раздела? Я не хочу слушать события, которые не связаны с текущим разделом просмотра. Должен ли я создавать новое соединение каждый раз, когда пользователь изменяет раздел, ориентируясь на другое пространство имен? Или я должен удалить все прослушиватели событий в сокете и прикрепить новый набор событий? Я не знаю, что лучше всего подходит, или если socket.io - лучший выбор для этого.

Спасибо.

+0

Вы заглянули в пространство имен http://socket.io/#how-to-use? – vinayr

+0

Да, поэтому я спрашиваю, есть ли хорошая идея создать новое соединение каждый раз, когда пользователь меняет раздел, нацеливаясь на другое пространство имен ... Или я думаю, что это неправильно:/ – ezakto

+0

Почему вы создаете новое соединение? Это одностраничное правое (что означает, что вы используете ajax для загрузки разделов)? – vinayr

ответ

0

Ничего себе. Я нашел этот вопрос в Google, и я понял, что никогда не опубликовал свое решение.

Благодаря this answer, я решил использовать комнаты вместо пространств имен. Поэтому, когда пользователь меняет разделы, сокет выдает событие «changeSection». В ServerSide, я выхожу из комнаты, соответствующая старая часть и присоединиться к новому:

io.sockets.on('connection', function (socket){ 
    socket.on('changeSection', function (section){ 
    // Leave all previous rooms 
    for (var room in io.sockets.manager.roomClients[socket.id]) socket.leave(room.slice(1)); 
    // Join new 
    socket.join(section); 
    }); 
}); 

Затем я посылаю раздел конкретных событий (например, уведомление, новые комментарии, сообщения чата) в соответствующей комнату.

Смежные вопросы