Если в БД произошло такое-то событие, как сказать это таким-то клиентам и выполнить такие-то действия?

Всем привет. Решил познакомиться с node.js, mongodb и вебсокетами, в связи с чем начал разработку небольшого ресурса. Создаётся дуэль между несколькими игроками, когда в дуэль заходит новый человек в базу записывается его id. Теперь нужно сказать остальным участником этой дуэли что появился новый игрок и соответственно показать эту инфу им (простым языком: если в БД произошло такое-то событие, сказать это таким-то клиентам и выполнить такие-то действия). Капаю в сторону sockjs но не могу разобраться до конца. Опыта, увы, мало и застопорился на такой задачке. В общем подскажите пожалуйста кто чем может, как решаются задачки такого плана.
  • Вопрос задан
  • 2637 просмотров
Решения вопроса 1
dizballanze
@dizballanze
Software developer at Yandex
Насколько я понял в SockJS нет комнат или какого-либо роутинга из коробки. По-этому, вам нужно будет реализовывать его самому. Алгоритм примерно такой:

- для каждой комнаты генерируется уникальный идентификатор
- клиентам в комнате ставится в соответствие её идентификатор и вешается обработчик, который подписывается на соответствующий комнате канал pubsub в Redis.
- при подключении нового пользователя заталкиваем сообщение о том, что новый пользователь подключился к комнате в канал комнаты (pubsub)
- обработчики каждого клиента получают сообщение и отправляют его непосредственно клиенту

Как вариант можно перейти на что-либо более функциональное, например: faye или socket.io.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
street
@street
Backend developer
Не совсем понятно, зачем здесь Redis? Без него, я думаю можно ограничиться средствами JS:
1. Создаем объект, где будут хранится списки комнат (названия можно генерировать уникальными);
2. При подключении клиента, заносим информацию в socket о подключаемой комнате;
3. Переносим в объект со списком комнат идентификатор подключенного клиента в нужную "комнату".

Для этого всего можно реализовать простенький модуль на Node.JS. Рассылку уведомлений Вы сможете легко реализовать для нужной комнаты, т.к. список всех подключенных клиентов в комнату у Вас уже будет. Главное не забывать про таймауты и автоматическую отписку от комнаты.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы