Подтвердить что ты не робот

Рельсы с архитектурой уведомлений в реальном времени

Мне нужно добавить уведомления в реальном времени в мое приложение Rails. Вот различные возможные архитектуры, которые я нашел.

1. Rails + Socket.io + Redis: как предложено в этой post, имеющей следующую архитектуру:

Rails + Socket.io + Redis

  • Pro: очистка, никакие данные не теряются, если Socket.io не работает.
  • Con: представляет несколько технологий (упрощает ремонтопригодность)

2. Rails + Socket.io: создание Rails-сервера Socket.io, как это делает репо: https://github.com/lyondhill/socket.io-ruby-client

Rails + Socket.io

  • Pro: прямолинейный
  • Кон. Опираясь на непопулярную библиотеку

3. Ruby Faye: http://faye.jcoglan.com/ruby.html

  • Pro: 100% Ruby
  • Кон. Поскольку требуется внешнее приложение, Socket.io теперь является гораздо более промышленным стандартом, чем Faye.

4. ActionController:: Live: http://edgeapi.rubyonrails.org/classes/ActionController/Live.html

  • Pro: Rails в приложении
  • Кон: слишком незрелый

Вопросы:

  • Есть ли стандартный способ (я бы пропустил) сделать это сейчас?
  • Любые мысли о моем сравнении (надеюсь, что это не закрывается)?
4b9b3361

Ответ 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 или другими соединениями).

Удачи!