2008-10-03 10 views
12

Me gustaría implementar una solución robusta de IPC entre una única aplicación JVM (un proceso, potencialmente múltiples subprocesos) y una aplicación nativa de C++ que está vinculada a un dll de C++. El dll puede o no estar en la misma máquina física. ¿Cuál es el mejor enfoque para hacerlo?¿Cuál es el mejor enfoque para IPC entre Java y C++?

¡Cualquier sugerencia será muy apreciada! ¡Gracias!

Respuesta

9

Usaría un socket TCP/IP estándar, donde la aplicación escucha en algún puerto y la biblioteca se conecta a ella para informar qué debe informar y esperar las respuestas.

La abstracción es robusta, bien soportada y no tendrá problemas de interoperabilidad.

4

¿Has considerado Facebook's Thrift framework?

Thrift es un marco de software para el desarrollo de servicios multilingües escalables. Combina una pila de software con un motor de generación de código para crear servicios que funcionen de manera eficiente y sin problemas entre C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk y OCaml.

Thrift le permite definir tipos de datos e interfaces de servicio en un archivo de definición simple. Tomando ese archivo como entrada, el compilador genera código para ser utilizado fácilmente para construir clientes RPC y servidores que se comunican sin problemas a través de los lenguajes de programación.

Puede funcionar con sockets TCP y la serialización/deserialización ya está incorporada.

Lea el whitepaper para obtener más detalles.

+2

Thrift sería genial, pero veo que la primera frase en sus documentos aquí dice que no funcionará en Windows ... ¿estoy interpretando eso correctamente? http://wiki.apache.org/thrift/ThriftInstallationWin32 –

+0

@Justin: Sí, no se compila con Visual Studio. – dalle

+1

Más viejo hilo, pero el ahorro ahora viene con proyectos de Visual Studio (2010) incluidos –

0

mmm - Las DLL no son procesos, así que supongo que quiere decir IPC entre su aplicación Java y alguna otra aplicación nativa que esté vinculada a la DLL. Los zócalos, por cierto, son el camino a seguir aquí. Hará todo más fácil para ti.

Otra opción sería usar JNI para hablar con una implementación de DCOM, pero no creo que ganes mucho (aparte de tener que lidiar con los dolores de cabeza de COM y JNI :-)).

4

Google protocol buffer puede ayudarlo a serializar los datos en una plataforma de idioma y manera neutral. También generará código en Java y C++ para manejar la lectura y escritura de datos serializados. A continuación, puede utilizar cualquier mecanismo de comunicación que desee enviar los datos. Por ejemplo, puede enviarlo a través de un socket TCP o mediante memoria compartida IPC.

0

Estoy viendo el Remote Call Framework, para mis aplicaciones puramente C++. Las especificaciones se ven bonitas y prometedoras. Voy a intentarlo.

Cuestiones relacionadas