3

我有两个 Java 程序,每个程序都在自己的 JVM 实例中运行?他们可以使用任何 IPC 技术(如共享内存或管道)相互通信吗?有没有办法做到这一点?

4

5 回答 5

3

是的; D-BUSPipes都易于使用且跨平台。D-BUS 对于一般的消息传递 IPC 和发送批量数据的管道很有用。

如果您需要支持连接到中央服务器的多个客户端,您还可以在 localhost 上打开 TCP 或 UDP 套接字。

我还在Java 中找到了 UNIX 套接字的实现,尽管它需要 JNI。

于 2009-05-06T17:00:38.010 回答
2

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

Java 远程方法调用 (Java RMI) 使程序员能够创建基于 Java 技术到基于 Java 技术的分布式应用程序,其中远程 Java 对象的方法可以从可能在不同主机上的其他 Java 虚拟机*调用。RMI 使用对象序列化来编组和解组参数并且不截断类型,支持真正的面向对象的多态性。

于 2009-05-06T17:01:01.270 回答
1

当然。看看 RMI 或Java Spaces 之类的共享内存概念。

于 2009-05-06T17:02:45.230 回答
1

在 Java NIO 中使用 MemoryMappedByteBuffer 在进程之间共享内存。

于 2015-05-21T16:22:16.697 回答
0

对于来自 Apache 的列式(即基于数组的)数据的与语言无关的 IPC,有一个相当新的倡议,称为Plasma

到目前为止(2017 年 9 月)还没有 JVM 绑定,但是由于该项目得到了 Spark 之类的支持,我认为我们很快就会看到实现。

然而,我的理解是,没有一个通用的 IPC 系统,因为它旨在共享用于科学计算的原语数组doublelong而不是类/对象;虽然我在这里可能是错的。从好的方面来说,它也与语言无关,因此您可以使用它与另一个(非 JVM)运行时进行通信。但是,OP 确实要求使用 Java IPC,因此这可能无关紧要。

于 2017-09-17T14:59:55.513 回答