Tengo una aplicación Java, que se conecta a través de un socket TCP a un "servidor" desarrollado en C / C ++.
Tanto la aplicación como el servidor se ejecutan en la misma máquina, una caja Solaris (pero estamos considerando migrar a Linux eventualmente). El tipo de datos intercambiados son mensajes simples (inicio de sesión, ACK de inicio de sesión, luego el cliente pide algo, el servidor responde). cada mensaje tiene una longitud aproximada de 300 bytes.
Actualmente estamos usando Sockets y todo está bien, sin embargo, estoy buscando una forma más rápida de intercambiar datos (menor latencia), usando métodos IPC.
He estado investigando en la red y encontré referencias a las siguientes tecnologías:
- memoria compartida
- tubería
- colas
- así como lo que se conoce como DMA (acceso directo a memoria)
pero no pude encontrar un análisis adecuado de sus respectivos rendimientos, ni cómo implementarlos tanto en JAVA como en C / C ++ (para que puedan hablar entre sí), excepto tal vez tuberías que podría imaginar cómo hacerlo.
¿Alguien puede comentar sobre el rendimiento y la viabilidad de cada método en este contexto? ¿Algún puntero / enlace a información de implementación útil?
EDITAR / ACTUALIZAR
Siguiendo el comentario y las respuestas que obtuve aquí, encontré información sobre Unix Domain Sockets, que parecen estar construidos solo sobre tuberías, y me ahorrarían toda la pila TCP. es específico de la plataforma, así que planeo probarlo con JNI o juds o junixsocket .
Los siguientes pasos posibles serían la implementación directa de tuberías, luego la memoria compartida, aunque me han advertido del nivel adicional de complejidad ...
gracias por tu ayuda