Ho un'app Java, che mi connette tramite socket TCP ad un "server" sviluppato in C / C ++.
sia l'app che il server sono in esecuzione sulla stessa macchina, una scatola Solaris (ma alla fine stiamo considerando la migrazione a Linux). il tipo di dati scambiati sono messaggi semplici (login, login ACK, poi il client chiede qualcosa, il server risponde). ogni messaggio è lungo circa 300 byte.
Attualmente stiamo usando i socket e tutto va bene, tuttavia sto cercando un modo più veloce per scambiare dati (latenza inferiore), usando i metodi IPC.
Ho fatto ricerche in rete e ho trovato riferimenti alle seguenti tecnologie:
- memoria condivisa
- tubi
- code
- così come quello che viene chiamato DMA (Direct Memory Access)
ma non sono riuscito a trovare un'analisi adeguata delle loro rispettive prestazioni, né come implementarle sia in JAVA che in C / C ++ (in modo che possano parlare tra loro), tranne forse pipe che potrei immaginare come fare.
qualcuno può commentare le prestazioni e la fattibilità di ciascun metodo in questo contesto? qualsiasi puntatore / collegamento a informazioni utili sull'implementazione?
MODIFICA / AGGIORNAMENTO
seguendo il commento e le risposte che ho ricevuto qui, ho trovato informazioni sui socket di dominio Unix, che sembrano essere costruiti appena su pipe, e mi farebbero risparmiare l'intero stack TCP. è specifico della piattaforma, quindi ho intenzione di testarlo con JNI o juds o junixsocket .
i prossimi passi possibili sarebbero l'implementazione diretta delle pipe, quindi la memoria condivisa, anche se sono stato avvertito del livello extra di complessità ...
Grazie per l'aiuto