2012-02-19 11 views
5

Actualmente estoy usando raíles para dar servicio a páginas web estáticas y estoy experimentando con NodeJs para manejar algunos aspectos de mi aplicación en tiempo real.¿Cómo estructurar la comunicación entre el servidor Nodejs y los rieles?

Pude hacer una comunicación unidireccional entre Nodejs y mi servidor Rails haciendo que Nodejs escriba en un db y el servidor de mis rails lea de él.

Ahora quiero hacer lo contrario, también una acción en Rails desencadenará una acción en Nodejs. Obviamente puedo ser tonto y tener un nodo continuamente sondeando el servidor de la base de datos.

¿Cuáles son mis opciones?

  1. establecer llamadas RPC entre ambos
  2. Establecer un socket TCP en ambos sentidos

¿Hay opciones más fácil/más rápido?

Respuesta

3

Bueno técnicamente tiene un montón de maneras para que inter process communication, si quieres algo fácil creo que usted debe echar un vistazo a dnode que proporciona RPC en TCP o canalizaciones con nombre y tiene una ruby implementation. Haciendo que sea muy fácil para usted hacer llamadas RPC y dado que es TCP, puede usarlo en máquinas cruzadas.

También puede tener una cola de mensajes como zeromq, pero creo que tendrá una sobrecarga innecesaria. Sería bueno para los casos que tenga mucho más de dos procesos hablando entre sí.

Además de todo esto, si desea la latencia mínima, si sus procesos se están ejecutando en una máquina, creo que debería usar una tubería con nombre y stdio para la comunicación, pero no conozco ningún módulo en el nodo que le ayudará a abstraer eso, y debe construir su propio módulo RPC en stdio.

+3

Para agregar a esto, considere zeromq si desea un ecosistema donde tiene que ser independiente del lenguaje, donde los diferentes procesos escritos en diferentes idiomas se comunican entre sí a través de un protocolo estandarizado. Eso es lo que puede ofrecer zeromq: simplifique la capa de comunicación y facilite que los procesos se comuniquen entre sí. –

3

Si está utilizando Redis, hace poco escribió un redis_message_capsule:

para hacer esto. Siéntase libre de probarlo o modificarlo como lo desee.

+0

+1 Esta es una solución realmente buena. Gracias por el impresionante trabajo. – lorefnon

Cuestiones relacionadas