Comunicazione tra processi tra l'app C ++ e l'app Java in ambiente operativo Windows
Domanda
Abbiamo un'applicazione C ++ su Windows che avvia un processo Java. Queste due app devono comunicare tra loro (tramite frammenti di xml).
Quale metodo di comunicazione tra processi sceglieresti e perché?
I metodi sul tavolo per noi sono: un file condiviso (s), pipe e socket (anche se penso che questo abbia alcuni problemi di sicurezza). Sono aperto ad altri metodi.
Soluzione
Non sono sicuro del motivo per cui ritieni che la comunicazione basata su socket abbia problemi di sicurezza (usa SSL). Spesso è un ottimo approccio in quanto è linguaggio agnostico , supponendo che tu abbia un protocollo di comunicazione ben definito. Dai un'occhiata al buffer di protocollo di Google, ad esempio: generano le classi e i flussi Java richiesti.
Nella mia esperienza, i file system (in particolare i file system di rete) non sono adatti a tale comunicazione in quanto non sono necessariamente ottimizzati per messaggistica (ho visto problemi di cache che causano il mancato rilevamento dei file ad esempio dal processo target).
Un'altra opzione è un livello di messaggistica ( AMQ o Tibco per esempio) sebbene ciò comporterà probabilmente un maggiore sovraccarico amministrativo (più esperienza) da istituire.
Personalmente opterei per un approccio a socket puro per la sua flessibilità e semplicità. Sarai in completo controllo .
Altri suggerimenti
Ho usato named pipe per la comunicazione tra C # e un'app c ++ multipiattaforma e non ho avuto altro che buoni risultati. Escludere quelle prese è sicuramente la strada da percorrere.
Le prese sono carine. Ti danno la possibilità di creare facilmente un livello di test blackbox attorno a ciascun componente, nonché di eseguire ciascun componente sulla propria macchina.
La sicurezza è sicuramente una preoccupazione, ma ci sono una buona gamma di opzioni a seconda di quanto sia importante. Puoi utilizzare SSL, handshaking personalizzato, accessi protetti da password e firewall per proteggerlo.
Modifica: Non è qualcosa che consiglierei, ma c'è anche memoria condivisa con JNI. Ho pensato di menzionarlo perché non è nella tua lista.
Ice è piuttosto bello :)