Welche IPC-Methode/Bibliothek kann zwischen verschiedenen Sprachen kommunizieren?

Angenommen, ich habe eine C++-Anwendung, die Tastatureingaben lesen und auf der Konsole ausgeben würde, wenn ein Zeichen gedrückt wird. Wenn ich also „Hallo“ drücke (ohne dass sich der Cursor in einem bestimmten Fenster befinden muss), druckt die App nacheinander „h“, „e“, „l“, „l“, „o“ (ohne „Hallo“ zu benötigen). fertigstellen").

Ich möchte diese Sequenz an eine andere Anwendung senden, die in einer anderen Sprache geschrieben ist, z. B. C# in Unity oder Python. In gewisser Weise ist C++ also wie ein Server, der Strings an einen C#-Client streamt. Und der Client sollte jedes Zeichen sofort erhalten, sobald C++ es generiert. Der Client sollte auch in der Lage sein, Text an den Server zu senden. ZB Befehl, um den Server anzuweisen, das Lesen von Tastatureingaben für einige Sekunden zu unterbrechen.

Ich denke, dass dies ein IPC-Problem (Kommunikation zwischen Prozessen) sein sollte, da sich der Client auf derselben Maschine wie der Server befindet. Wir können mehrere Clients auf demselben Computer haben, die sich mit demselben Server verbinden.

Wenn wir also einen Server, einen C#-Client, einen Python-Client haben, würden beide Clients dieselbe Textsequenz vom Server erhalten. Und wenn der C#-Client den Server anweist, zu stoppen, würde der Python-Client den Text ebenfalls nicht erhalten.

Das Betriebssystem, auf dem es funktionieren sollte, ist Windows. Aber wenn es sowohl unter Unix als auch unter Windows funktionieren würde, wäre das besser.

Was ist ein guter IPC-Ansatz, der alle meine Anforderungen erfüllt?

PS. In einem realen Anwendungsfall würde ich 100 Mal pro Sekunde eine Zeichenfolge mit 1.000 Zeichen an den Client senden, anstatt Tastenanschläge zu senden. Aber es wäre immer noch eine sehr kleine Menge, weil es sich im selben Computer befindet.

Antworten (1)

Der Server kann UDP-Multicast verwenden, um die Zeichen zu veröffentlichen, auf diese Weise muss er sich nicht wirklich darum kümmern, welche Clients genau lauschen. Die Clients müssen sich nur bei der Multicast-Gruppe registrieren und hören, was der Server sendet.

Erstellen Sie außerdem für die Funktion zum Anhalten einen (Unicast-)UDP-Socket, auf dem der Server lauscht und an den die Clients eine Nachricht senden können.

Sie können sicher sein, dass UDP von allen Sprachen unterstützt wird, die Sie benötigen, und der Overhead ist ebenfalls gering. Sicherlich gibt es bessere Ansätze für einfache IPCs wie diese, die den Netzwerkstapel nicht benötigen, aber die Verwendung von UDP ist einfach, Sie werden leicht Dokumentation finden.

Was der Server sendet, kann verloren gehen und in Ordnung sein. Aber der Befehl zum Anhalten des Servers muss zuverlässig sein, daher denke ich, dass es besser wäre, TCP zu verwenden. Kann ich in diesem Fall sowohl UDP als auch TCP verwenden?
Können Sie mir auch einen bestimmten Tutorial-/Beispiellink zur Implementierung der von Ihnen erwähnten Multicast-Sachen geben?
@ off99555 Sicher können Sie auch TCP verwenden, aber ich glaube nicht, dass es lokal zu Paketverlusten kommen kann. Was wäre der Grund für den Paketverlust? Wrt. Anleitungen: python stackoverflow.com/a/1151620/1319284 Java docs.oracle.com/javase/7/docs/api/java/net/MulticastSocket.html C++ gist.github.com/hostilefork/f7cae3dc33e7416f2dd25a402857b6c6 C# jarloo.com/c -udp-multicasting-tutorial Im Grunde habe ich nur "[Sprache] UDP-Multicast" gegoogelt