是否可以在Java中进行InterProcess通信?

时间:2009-05-06 16:58:21

标签: jvm ipc

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

5 个答案:

答案 0 :(得分:3)

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

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

我还找到了implementation of UNIX sockets in Java,但它需要JNI。

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

不确定。查看RMI或共享内存概念,如Java Spaces

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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

到目前为止(9月17日)还没有JVM绑定,但由于该项目得到了Spark的支持,我认为在我们看到实现之前不久就已经过了。

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