3 Stimmen

Ist es möglich, Inter-Process-Kommunikation in Java zu haben?

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?

3voto

John Millikin Punkte 190278

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.

2voto

Peter D Punkte 4801

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.

1voto

Mork0075 Punkte 5825

Sicher. Schauen Sie sich RMI oder ein Shared-Memory-Konzept wie Java Spaces an.

1voto

Amrish Pandey Punkte 759

Verwenden Sie MemoryMappedByteBuffer in Java NIO, um Speicher zwischen Prozessen auszutauschen.

0voto

Luciano Punkte 2326

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X