ruby on rails - rails - Rieles con arquitectura de notificaciones en tiempo real
cable ruby (3)
Definitivamente debe echar un vistazo en https://github.com/rails/actioncable
Action Cable integra perfectamente websockets con el resto de la aplicación Rails. Permite que las funciones en tiempo real se escriban en Ruby en el mismo estilo y forma que el resto de la aplicación Rails, sin dejar de ser eficaz y escalable. Es una oferta de pila completa que proporciona un marco de JavaScript del lado del cliente y un marco de Ruby del lado del servidor. Usted tiene acceso a su modelo de dominio completo escrito con ActiveRecord o su ORM de su elección.
Necesito agregar notificaciones en tiempo real a mi aplicación Rails. Aquí están las diferentes arquitecturas posibles que he encontrado.
1. Rails + Socket.io + Redis: Como se sugiere en esta post , con la siguiente arquitectura:
- Pro : Limpio, no se pierden datos si Socket.io no funciona
- Con : presenta varias tecnologías (endurece el mantenimiento)
2. Rails + Socket.io: Hacer Rails un cliente Socket.io, como parece hacer este repositorio: https://github.com/lyondhill/socket.io-ruby-client
- Pro : Directo
- Con : Confiar en una biblioteca poco popular
3. Ruby Faye: http://faye.jcoglan.com/ruby.html
- Pro : 100% Ruby
- Con : Como se requiere una aplicación externa, Socket.io es mucho más un estándar de la industria que Faye en este momento.
4. ActionController :: Live: http://edgeapi.rubyonrails.org/classes/ActionController/Live.html
- Pro : The Rails en la forma de la aplicación
- Con : demasiado inmaduro
Preguntas:
- ¿Hay alguna manera estándar (me habría perdido) de hacer eso hoy en día?
- ¿Alguna idea sobre mi comparación (espero que esto no se cierre)?
Eche un vistazo a Plezi (Es mi propio proyecto favorito, por lo que podría ser parcial).
Aunque también se puede utilizar como un marco independiente, es fácil configurarlo como un complemento de Rails o como un reemplazo de socket.io con Redis.
Puede escribir un controlador websocket Plezi y ejecutarlo junto con su aplicación Rails en el mismo proceso (mismo ip: puerto) si cambia su servidor al servidor preferido de Plezi (simplemente elimine las referencias a otros servidores de su gemfile).
Otra alternativa es ejecutar Plezi como un proceso independiente (en un puerto diferente) y sincronizarlos usando Redis (usando la API Placebo de Plezi).
Hay una sección en la documentación de Plezi titulada: " Usando Plezi con nuestra aplicación Rack existente "
Pro : Utiliza implementaciones de websocket nativas (websockets del lado del servidor) y un servidor de extensión C rápido (Iodine). La integración total con su aplicación Rails es posible (sirva tanto a websockets como a HTTP en el mismo dominio / proceso / ip / puerto); Escalado sencillo (soporte automático de redis).
Con : Young; Requiere soporte de extensión C (Ruby MRI) y máquina Linux / BSD / OS X (sin ventanas); El código compartido debe ser seguro para subprocesos (los websockets se pueden ejecutar en paralelo con HTTP u otras conexiones).
¡Buena suerte!
Eche un vistazo a eventmachine y websockets. También hay servicios de terceros como Pusher y PubNub que gestionarán la parte de websocket a través de HTTP API.
https://github.com/igrigorik/em-websocket
Rails 5 también agregará ActionCable, que lo hará en rieles, pero aún no ha salido.
Diría que la ventaja de estos enfoques es que no necesita una aplicación node.js separada. Los servicios son muy fáciles de usar, pero no gratuitos.