Comunicazione tra processi tra l'app C ++ e l'app Java in ambiente operativo Windows

StackOverflow https://stackoverflow.com/questions/1209406

  •  06-07-2019
  •  | 
  •  

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.

È stato utile?

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 :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top