Как добавить в веб-приложение функцию уведомления (оповещения) пользователя. Как это можно осуществить?
Суть: система собирает предложения пользователей по улучшению, таких предложений очень много, в предложениях есть поля: Заголовок, содержание, ключевые слова, актуальность и т.п. Есть главная страница со всеми предложениями от всех пользователей с фильтром. Я хочу уведомлять пользователя по ключевому слову или фразе, если появилось такое предложение. Может пользователи захотят скооперироваться по данной теме.
Уведомления изначально присылать на их имейл, или sms в будущем.
Вопрос: Как это осуществить? Где повесить "слушателя"? Как получать уведомления пользователю, не заходя в систему?
Должна быть в БД таблица, связывающая юзеров и тэги, на которые они подписаны (если у вас Mongo, то можно это хранить в коллекции юзеров). При добавлении нового предложения контроллер выбирает юзеров, которые подписаны на тэги этого предложения, и отсылает им имейлы (это лучше делать в отдельном потоке, с помощью очереди сообщений или по крону).
Я предполагаю так: сделать таблицу "subscribe" с полями _id, user_id, tags. При добавлении нового предложения запускается механизм проверки полей на свопадение в tags коллецкции subscribe, нашли совпадение, нашли пользователя, сформировали имейл и отправили этому пользователю.
Хорошо если пользователей 10, а если каждый подписался на разные теги? Да и долго так делать...
Меня интересует и логика и инструментарий, не могу найти решение. Понятно можно как на РСС пользователю сформировать некий урл и пусть он его опрашивает при каждом заходе в систему. Но как сделать опрос вне системы? Какой инструментарий использовать?
mpotemkin: Вы в правильную сторону думаете, но что значит "долго так делать"? Стандартный join двух таблиц, совершенно рядовая операция, чему там тормозить? Имейлы отправлять может быть долго, да, поэтому я и говорю, что их лучше отправлять через очередь.
Что значит "опрос вне системы"? Если вам нужно, чтоб пользователь получал уведомления, не открывая браузер, то вы сами все перечислили: RSS, e-mail, SMS. Можно сделать расширения для браузеров, которые будут показать пользователю его уведомления.
Уведомления складывать в табличку (_id, user_id, notification, has_read), непрочитанные показывать залогиненному пользователю на сайте.
Если просто, то можете написать скрипт который будет проверять предложения и выполнять уведовления, запускать скрипт Cron'ом. Такой способ плохо маштабируется, поэтому советую посмотреть в сторону Sidekiq (http://sidekiq.org), очередь и работники в одном.