2010-09-01 16 views
5

Estoy tratando de crear una aplicación de ruby ​​on rails ecommerce, donde los clientes potenciales podrán hacer un pedido y el dueño de la tienda podrá recibir el pedido en tiempo real. El pedido finalizado se registrará en la base de datos (actualmente SQLite), y el propietario de la tienda tendrá una ventana del navegador abierta, donde aparecerán los nuevos pedidos justo después de que se finalice el pedido. (Información de la aplicación: estoy usando el framework HOBO Rails, y planeando alojar la aplicación en Heroku)¿Cómo puedo recuperar registros actualizados en tiempo real? (notificaciones push?)

Ahora estoy considerando la mejor tecnología para implementar esto, ya que se espera que la aplicación tenga muchos usuarios enviando muchos pedidos:

1) Cada ventana del navegador actualiza la página cada X minutos, sondeando continuamente el servidor para nuevos registros (nuevos pedidos). Por supuesto, esto pone una carga pesada en el servidor.

2) Como arriba, pero sondee el servidor con algún tipo de framework AJAX.

3) Utilice algún tipo de tecnología de inserción de servidor, como la mensajería asíncrona 'cometa'. Encontrado Juggernaut, el único problema es que está utilizando Flash y puertos personalizados, y esto podría ser un problema, ya que mi aplicación debe ser accesible detrás de los firewalls corporativos y NAT.

4) También estoy comprobando el framework node.js, parece ser eficiente para este tipo de mensajería asincrónica, aunque no es compatible con Heroku.

¿Cuál es la forma más eficiente de implementar este tipo de funcionalidad? ¿Hay quizás otro método en el que no haya pensado?

¡Gracias por su tiempo y ayuda!

+1

¿cómo te fuiste con esto? :) – bxjx

Respuesta

3

Node.js probablemente sería un buen ajuste, es rápido, adora en tiempo real y tiene un gran soporte de cometas. El único inconveniente es que está introduciendo otra tecnología en su solución. Es muy divertido programar en tho y muchas de las bibliotecas se han inspirado en rails y sinatra.

Sé que heroku ha estado ejecutando un nodo.js beta por un tiempo y la gente lo usaba como parte de la reciente competencia nodeknockout. See this blog post. Si eso no es una opción, definitivamente podrías alojarlo en otro lado. Si lo aloja en heroku, es posible que pueda realizar solicitudes de proxy. De lo contrario, felizmente podría ejecutarlo desde un subdominio para que pueda compartir las cookies.

También checkout socket.io. Hace un gran trabajo al elegir la mejor forma de hacer cometas en función de las capacidades del navegador.

Para compartir datos entre el nodo y los rieles, puede compartir cookies y luego almacenar los datos de la sesión en su base de datos donde ambas aplicaciones pueden acceder. Una arquitectura más complicada podría implicar el uso de Redis para publicar mensajes entre ellos. O tal vez pueda salirse con la suya pasando todo lo que necesita en las solicitudes http.

1

En HTTP, las solicitudes solo pueden venir del cliente. Por lo tanto, las mejores opciones son las que ya mencionó (sondeo y transmisión HTTP).

El sondeo es la opción más fácil de implementar; Aunque usará bastante ancho de banda. Es por eso que debe mantener las solicitudes y respuestas lo más pequeñas posible, por lo que definitivamente debe usar XHR (Ajax) para esto.

Su otra opción es la transmisión HTTP (Comet); requerirá más trabajo en la configuración, pero puede que valga la pena el esfuerzo. Puede dar una oportunidad al Realtime on Rails. Para obtener más información y consejos sobre cómo reducir el uso de ancho de banda, consulte:

http://ajaxpatterns.org/Periodic_Refresh
http://ajaxpatterns.org/HTTP_Streaming

+0

Hola y gracias por su respuesta. Estoy pensando que la transmisión http (cometa) es más apropiada para mi aplicación, ya que espero que los propietarios de las tiendas estén enfrente de sus navegadores durante todo el día, esperando pedidos. Esto podría crear una carga significativa en el servidor si uso el sondeo. Entonces, ¿cómo integro los servidores de cometas (como node.js y Ajax Push Engine) con mi aplicación Ruby on Rails existente? ¿Esto significa que debería pagar otro servicio de host de Linux (además de heroku), donde se instalarán los servidores de cometas? ¿Qué opinas? Gracias! – Alex

0

En realidad, si usted tiene su dueño de la tienda ejecutar Chrome (otros navegadores de los diferentes eventos), puede utilizar WebSockets (sólo para sin embargo, la notificación del dueño de la tienda), que le permite tener una conexión constante abierta, y puede enviar datos al navegador sin que el navegador solicite nada.

Existen algunas bibliotecas de websocket para node.js, pero creo que puede hacerlo fácilmente utilizando solo una conexión tcp regular.

Cuestiones relacionadas