2009-07-30 5 views
6

Wir haben eine C++ - Anwendung unter Windows, die einen Java-Prozess startet. Diese beiden Apps müssen miteinander kommunizieren (über Snippets von XML).Interprozesskommunikation zwischen C++ - App und Java-App in Windows-Betriebssystemumgebung

Welche Interprozess-Kommunikationsmethode würden Sie wählen und warum?

Methoden auf dem Tisch für uns sind: eine gemeinsame Datei (en), Rohre und Steckdosen (obwohl ich denke, das hat einige Sicherheitsbedenken). Ich bin offen für andere Methoden.

Antwort

9

Ich bin nicht sicher, warum Sie glauben, Socket-basierte Kommunikation würde Sicherheitsbedenken haben (verwenden Sie SSL). Es ist oft ein sehr guter Ansatz, wie es Sprache Agnostic ist, vorausgesetzt, Sie haben ein gut definiertes Kommunikationsprotokoll. Sehen Sie sich zum Beispiel Google protocol buffers an - sie generieren die erforderlichen Java-Klassen und -Streams.

In meiner Erfahrung, Dateisysteme (insbesondere Netzwerk-Dateisysteme) sind nicht gut geeignet, um eine solche Kommunikation, wie sie sind nicht notwendigerweise für Messaging abgestimmt (Ich habe Caching-Probleme gesehen führen in Dateien, die vom Ziel bis nicht abgeholt werden Prozess zum Beispiel).

Eine weitere Option ist eine Messaging Schicht (AMQ oder Tibco zum Beispiel), obwohl dies wahrscheinlich einen größeren Verwaltungsaufwand (plus Know-how) beinhaltet einzurichten.

Persönlich würde ich für eine pure-Socket-Ansatz wegen seiner Flexibilität und Einfachheit entscheiden. Sie werden in voller Kontrolle sein.

+0

Ihr Punkt ist über Sockets und Sicherheit genommen. Vielen Dank. +1 –

3

ich für die Kommunikation zwischen C# Named Pipes verwendet haben und eine plattformübergreifende C++ App und hatte nichts als gute Ergebnisse. Barrieren, dass Sockets ist definitiv der Weg zu gehen.

2

Steckdosen sind nett. Sie geben Ihnen die Möglichkeit, sehr einfach eine Blackbox-Testschicht um jede Komponente herum zu erstellen und jede Komponente auf ihrer eigenen Maschine auszuführen.

Sicherheit ist definitiv ein Problem, aber es gibt eine gute Auswahl an Optionen, je nachdem, wie wichtig es ist. Sie können SSL, benutzerdefiniertes Handshaking, kennwortgeschützte Logins und Firewalls verwenden, um die Sicherheit zu gewährleisten.

Edit: Nicht etwas, das ich empfehlen würde, aber es gibt auch gemeinsamen Speicher mit JNI. Ich dachte, ich würde es erwähnen, weil es nicht auf deiner Liste steht.