возможно ли иметь межпроцессное взаимодействие в Java? - PullRequest
3 голосов
/ 06 мая 2009

У меня есть две Java-программы, каждая из которых работает в своем собственном экземпляре JVM? Могут ли они общаться друг с другом, используя какую-либо технику IPC, такую ​​как Shared Memory или Pipes? Есть ли способ сделать это?

Ответы [ 5 ]

3 голосов
/ 06 мая 2009

Да; Трубы D-BUS и просты в использовании и кроссплатформенны. D-BUS полезен для общего IPC с передачей сообщений и каналов для отправки массовых данных.

Вы также можете открыть сокет TCP или UDP на локальном хосте, если вам требуется поддержка нескольких клиентов, подключающихся к центральному серверу.

Я также обнаружил реализацию сокетов UNIX в Java , хотя для этого требуется JNI.

2 голосов
/ 06 мая 2009

http://java.sun.com/javase/technologies/core/basic/rmi/index.jsp

Удаленный вызов методов Java (Java RMI) позволяет программисту создавать распределенные приложения на основе технологии Java для приложений на основе технологии Java, в которых методы удаленных объектов Java могут вызываться из других виртуальных машин Java *, возможно, на разных хостах , RMI использует сериализацию объектов для маршалинга и демаршализации параметров и не усекает типы, поддерживая истинный объектно-ориентированный полиморфизм.

1 голос
/ 21 мая 2015

Используйте MemoryMappedByteBuffer в Java NIO для разделения памяти между процессами.

1 голос
/ 06 мая 2009

Конечно. Взгляните на RMI или концепцию общей памяти, например Java Spaces .

0 голосов
/ 17 сентября 2017

Существует довольно новая инициатива для не зависящих от языка IPC столбчатых (т.е. основанных на массивах) данных из Apache под названием Plasma .

Пока (17 сентября) нет привязок JVM, но поскольку проект поддерживается такими, как Spark, я думаю, что вскоре мы увидим реализацию.

Однако я понимаю, что не существует общей системы IPC, поскольку она предназначена для совместного использования массивов примитивов, таких как double, long, для научных вычислений, а не классов / объектов; хотя я могу ошибаться здесь С другой стороны, он также не зависит от языка, поэтому вы можете использовать его для связи с другой (не JVM) средой выполнения. Тем не менее, OP действительно запрашивал Java IPC, так что это может быть неактуально.

...