Рельсы с архитектурой уведомлений в реальном времени
Мне нужно добавить уведомления в реальном времени в мое приложение Rails. Вот различные возможные архитектуры, которые я нашел.
1. Rails + Socket.io + Redis: как предложено в этой post, имеющей следующую архитектуру:
![Rails + Socket.io + Redis]()
- Pro: очистка, никакие данные не теряются, если Socket.io не работает.
- Con: представляет несколько технологий (упрощает ремонтопригодность)
![Rails + Socket.io]()
- Pro: прямолинейный
- Кон. Опираясь на непопулярную библиотеку
- Pro: 100% Ruby
- Кон. Поскольку требуется внешнее приложение, Socket.io теперь является гораздо более промышленным стандартом, чем Faye.
- Pro: Rails в приложении
- Кон: слишком незрелый
Вопросы:
- Есть ли стандартный способ (я бы пропустил) сделать это сейчас?
- Любые мысли о моем сравнении (надеюсь, что это не закрывается)?
Ответы
Ответ 1
Взгляните на eventmachine и websockets. Существуют также сторонние сервисы, такие как Pusher и PubNub, которые будут обрабатывать часть websocket для вас через HTTP API.
https://github.com/igrigorik/em-websocket
Rails 5 также добавит ActionCable, который сделает это в рельсах, но он еще не вышел.
Я бы сказал, что преимущество этих подходов заключается в том, что вам не нужно отдельное приложение node.js. Услуги очень просты в использовании, но не бесплатны.
Ответ 2
Вы должны обязательно взглянуть на https://github.com/rails/actioncable
Action Cable плавно интегрирует веб-порты с остальной частью вашего приложения Rails. Это позволяет записывать в режиме реального времени функции в Ruby в том же стиле и форме, что и остальная часть вашего приложения Rails, при этом все еще выполняющая и масштабируемая. Это предложение полного стека, которое обеспечивает как клиентскую инфраструктуру JavaScript, так и структуру Ruby на стороне сервера. У вас есть доступ к полной модели домена, написанной с помощью ActiveRecord или вашего ORM.
Ответ 3
Взгляните на Plezi (Это мой собственный проект для животных, поэтому я могу быть предвзятым).
Несмотря на то, что он также может использоваться как независимая среда, легко установить его либо в виде дополнения Rails, либо в качестве замены socket.io с помощью Redis.
Вы можете написать контроллер websocket Plezi и запустить его вместе с вашим приложением Rails в том же процессе (тот же ip: порт), если вы переключите сервер на предпочтительный сервер Plezi (просто удалите ссылки на другие серверы из вашего gemfile).
Другой вариант - запустить Plezi как независимый процесс (на другом порту) и синхронизировать их с помощью Redis (используя API Plezi Placebo).
В разделе документации Plezi есть раздел под названием " Использование Plezi с помощью нашего существующего приложения Rack"
Pro. Использует собственные реализации websocket (серверные веб-сайты) и быстрый сервер расширения C (Iodine). Возможна полная интеграция с вашим Rails-приложением (как для веб-сайтов, так и для HTTP в одном домене/процессе/ip/port); Простое масштабирование (поддержка авто-redis).
Кон: молодой; Требуется поддержка расширения C (Ruby MRI) и Linux/BSD/OS X (без окон); Общий код должен быть потокобезопасным (websockets может работать параллельно с HTTP или другими соединениями).
Удачи!