Interprocess Communication zwischen C ++ und Java App App in Windows-Betriebssystem-Umgebung

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

  •  06-07-2019
  •  | 
  •  

Frage

Wir haben eine C ++ Anwendung unter Windows, die einen Java-Prozess beginnt. Diese beiden Anwendungen müssen miteinander (über Auszüge, xml) kommunizieren.

Was für Interprozesskommunikationsmethode würden Sie wählen und warum?

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

War es hilfreich?

Lösung

Ich bin mir nicht sicher, warum socket-basierte Kommunikation Sicherheitsbedenken haben würde (Verwendung von SSL). Es ist oft ein sehr guter Ansatz, wie es ist sprachunabhängig , vorausgesetzt, dass Sie ein gut definierte Kommunikationsprotokoll haben. Werfen Sie einen Blick auf Googles Protokollpuffer , zum Beispiel - sie erzeugen die erforderlichen Java-Klassen und Ströme

.

Nach meiner Erfahrung, Dateisysteme (insbesondere Netzwerk-Dateisysteme) sind nicht gut geeignet, um eine solche Kommunikation, wie sie notwendigerweise nicht abgestimmt für Messaging (Ich habe zur Folge haben Probleme in Dateien gesehen das Caching wird nicht abgeholt up durch den Zielprozess zum Beispiel).

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

Persönlich würde ich für einen reinen Sockel Ansatz entscheidet aufgrund seiner Flexibilität und Einfachheit. Sie werden sein in der vollständigen Kontrolle .

Andere Tipps

Ich habe Named Pipes für die Kommunikation zwischen C # und einem plattformübergreifende C ++ App verwendet und hatte nichts als gute Ergebnisse. Abgesehen, dass Steckdosen ist definitiv der Weg zu gehen.

Sockel sind nett. Sie geben Ihnen die Möglichkeit, sehr leicht eine Black-Box-Test Schicht um jede Komponente zu erstellen, sowie jede Komponente auf einer eigenen Maschine ausgeführt werden.

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

Edit: Nicht etwas, würde ich empfehlen, aber es gibt auch Speicher mit JNI geteilt. Ich dachte, ich es nennen würde, weil es nicht auf der Liste ist.

Ice ist ziemlich cool:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top