2012-05-02 13 views
7

Estoy trabajando en la aplicación donde necesito pasar mensajes entre una aplicación C++ y una aplicación web Javascript.¿Existe una API de comunicaciones entre procesos de alto nivel implementada en C++ y Javascript?

Ciertamente podría escribir código de sockets en cualquier idioma y lo he hecho en el pasado cuando sea necesario.

Lo que realmente me gustaría es una publicación de mensajes de alto nivel o una API de puesta en cola de mensajes que hace mucho por mí. ¿Alguien sabe de tal API?

He mirado ICE, y no parece tener enlaces de Javascript. También miré la cola de mensajes de Boost, pero solo atiende el lado C++ de las cosas. Si es necesario, podría lanzar mis propios enlaces de Javascript para cualquiera de estas tecnologías.

ACTUALIZACIÓN: Lo siento, debería haber mencionado esto antes, quiero ejecutar esto en un navegador.

Para dar una historia más completa, lo que quiero es una sencilla aplicación basada en navegador que se usa para configurar y mostrar el registro para una aplicación C++.

Sé que hay otras maneras de hacerlo, pero estoy especialmente interesado en una biblioteca de alto nivel tanto en C++ como en Javascript basado en navegador que construye una cola de mensajes ontop de la API de sockets (si no hay uno entonces podría considerar implementarlo yo mismo y escribir un artículo de proyecto de código).

TAMBIÉN: No me preocupa la portabilidad en términos del navegador web. Por ejemplo, si hay una biblioteca Javascript de IPC de alto nivel que solo funciona en Chrome, estaré contento con eso.

+0

¿Está en el navegador o en el lado del servidor js? ¿Qué ambiente? – joshp

+1

Sus opciones son básicamente JSON/HTTP, XML/HTTP, o algo usando WebSockets. –

Respuesta

2

He encontrado una solución que satisface mis necesidades. No es exactamente perfecto, pero creo que funciona bastante bien.

Algunas personas sugirieron usar HTTP y ajax. Resultó ser una idea útil y después de crear prototipos creo que resuelve mis necesidades bastante básicas.

Para ser más específicos, estoy usando el servidor Mongoose HTTP incrustado en mi aplicación C++ y estoy usando la función jQuery ajax para extraer datos del servidor. El cliente jQuery sondea continuamente el servidor en busca de nuevos datos, no es particularmente eficiente, pero creo que hará el trabajo lo suficientemente bueno para mí.

Una vez que se complete mi implementación, escribiré un artículo explicando cómo hacer esto en detalle y luego actualizaré esta respuesta.

+0

En caso de que alguien esté interesado, he escrito un artículo sobre el proyecto del que estaba hablando en esta pregunta/respuesta. http://www.codeproject.com/Articles/448756/Introducing-Investigo-Using-a-Proxy-DLL-and-embedd –

4

Simplemente responda su pregunta: No, no hay IPC implementado en ECMAscript de fábrica.

Pero en realidad ya respondió su pregunta. Si intenta comunicarse con Javascript que se ejecuta en un navegador, debe usar las conexiones de los sockets (web) a la fecha de la tubería en cualquier dirección. Por supuesto, podría escribir un simple servidor HTTP en C++, pero supongo que es excesivo y no tiene la capacidad de enchufes bidireccionales.

Todavía es un trabajo implementar una conexión web-socket en C++ desde cero (las especificaciones estuvieron en flujo durante mucho tiempo), pero supongo que ya hay algunas bibliotecas.

Si está tratando de comunicarse con node.js, esta es una tarea casi trivial usando sockets/pipes reales.

+0

¿No están incluidos los websockets (un método de IPC) (al menos en algunos navegadores) de fábrica? –

+0

¿Cómo no cumple XMLHttpRequest la definición de IPC? Incluso es una buena base obvia para una interfaz RPC. – Potatoswatter

+0

@jAndy ¿Sigue siendo un trabajo implementar sockets web en C++ desde cero? ¿Hay algún recurso que recomiende y sería útil para lograr esto? – Greg

4

Con JavaScript supongo que lo está ejecutando en un navegador? En este caso, su aplicación C++ necesita proporcionar un servidor web y algún tipo de servicio web basado en JSON al que pueda llamar. En el lado de JavaScript solo utiliza AJAX para comunicarse con ese servicio web.

Una alternativa sería websockets que, sin embargo, podría ser un poco más difícil de implementar en el lado de C++.

+0

Sí, lo ejecuta en el navegador. Socket web es lo que estoy pensando que usaré en el Javascript. –

+0

Eso puede ser complicado. Dependiendo de las versiones de navegador que desee admitir, también debe implementar repliegues, ya que no todos tienen soporte completo de websocket. Básicamente necesitarás http://socket.io pero para C++ en lugar de NodeJS. El servicio web funcionará en todas partes y también con clientes que no sean JavaScript. – Daff

0

Para una implementación del lado del servidor o no del navegador, ¿qué hay de las canalizaciones con nombre?

Sí, es una tecnología antigua y el uso depende del sistema operativo que utilice, pero mientras su entorno js del lado del servidor tenga capacidad para leer y escribir archivos, puede funcionar y se ajusta a la descripción de "alto nivel" entre procesos comunicación.

+0

Aha, está basado en navegador, según la actualización, por lo que mi respuesta no se aplica. – joshp

1

Puede probar DBus, tiene un mecanismo muy simple para definir, consultar y usar interfaces, y hay algunos componentes para los navegadores basados ​​en XPCOM y webkit (por ejemplo http://sandbox.movial.com/wiki/index.php/Browser_DBus_Bridge y http://code.google.com/p/v8-dbus/). También DBus es de código abierto y multiplataforma.

+0

Gracias. Eso parece interesante, lo investigaré. –

+0

No creo que esto haga lo que él quiere. Creo que quiere que la aplicación web hable con aplicaciones en su servidor, no con aplicaciones en la misma máquina local que el navegador. Esto solo funcionará si el navegador y la aplicación C++ están en la misma máquina. (DBus es un plan de comunicación local.) –

Cuestiones relacionadas