Ich habe zwei Java-Programme, die jeweils in ihrer eigenen JVM-Instanz laufen. Können sie miteinander kommunizieren, indem sie eine IPC-Technik wie Shared Memory oder Pipes verwenden? Gibt es eine Möglichkeit, dies zu tun?
Antworten
Zu viele Anzeigen?Ja; D-BUS und Pipes sind beide einfach zu verwenden und plattformübergreifend. D-BUS ist nützlich für allgemeinen Nachrichtenaustausch in IPC und Pipes für den Versand von großen Datenmengen.
Sie können auch einen TCP- oder UDP-Socket auf localhost öffnen, wenn Sie mehrere Clients unterstützen müssen, die sich mit einem zentralen Server verbinden.
Ich habe auch eine Implementierung von UNIX-Sockets in Java gefunden, obwohl sie JNI erfordert.
http://java.sun.com/javase/technologies/core/basic/rmi/index.jsp
Die Java Remote Method Invocation (Java RMI) ermöglicht es dem Programmierer, verteilte Anwendungen auf Java-Technologiebasis zu erstellen, in denen die Methoden entfernter Java-Objekte aus anderen Java-Virtual Machines auf möglicherweise verschiedenen Hosts aufgerufen werden können. RMI verwendet die Objektserialisierung zum Marshalling und Unmarshalling von Parametern und kürzt Typen nicht ab, was echte objektorientierte Polymorphie unterstützt.
Sicher. Schauen Sie sich RMI oder ein Shared-Memory-Konzept wie Java Spaces an.
Es gibt eine ziemlich neue Initiative für sprachunabhängige IPC von spaltenbasierten (d.h. Array-basierten) Daten von Apache namens Plasma.
Bisher (Sept '17) gibt es keine JVM-Bindungen, aber da das Projekt von Unternehmen wie Spark unterstützt wird, denke ich, dass es nicht lange dauern wird, bis wir eine Implementierung sehen.
Mein Verständnis ist jedoch, dass es kein allgemeines IPC-System gibt, da es darauf ausgerichtet ist, Arrays von Primitiven wie double
, long
für wissenschaftliches Rechnen zu teilen, anstatt Klassen/Objekte; obwohl ich hier falsch liegen könnte. Auf der positiven Seite ist es auch sprachunabhängig, sodass Sie es verwenden könnten, um mit einer anderen (nicht-JVM) Laufzeitumgebung zu kommunizieren. Allerdings hatte der OP nach Java IPC gefragt, also könnte das irrelevant sein.