我有以下情况:
我有2个JVM进程(真2 java
程序运行分开,而不是2个线程)在本地机器上运行。 让我们把他们ProcessA
的ProcessB
。
我希望他们能互相通信(交换数据)(例如ProcessA
发送消息给ProcessB
做一些事情)。
现在,我解决这个问题写一个临时文件,这些过程是周期性扫描该文件,以获得消息。 我认为这个解决方案是不那么好。
这将是一个更好的选择,以实现我想要什么?
我有以下情况:
我有2个JVM进程(真2 java
程序运行分开,而不是2个线程)在本地机器上运行。 让我们把他们ProcessA
的ProcessB
。
我希望他们能互相通信(交换数据)(例如ProcessA
发送消息给ProcessB
做一些事情)。
现在,我解决这个问题写一个临时文件,这些过程是周期性扫描该文件,以获得消息。 我认为这个解决方案是不那么好。
这将是一个更好的选择,以实现我想要什么?
对于多个选项IPC :
如果没有更多的细节,一个基于网络的裸骨IPC方法似乎是最好的,因为它是:
话虽这么说,可根据您的例子(简单地询问对方的过程做一个动作),JMX也可能是对你不够好。
我已经添加在GitHub上一库调用Mappedbus( http://github.com/caplogic/mappedbus ),它使两个(或更多)的Java进程/ JVM上通过交换消息进行通信。 库使用内存映射文件和利用的读取和添加和挥发性读/写同步不同的读者和作家。 我已经使用这个库40万消息/ s的25纳秒的平均延迟用于读/写的单个消息测量的两个过程之间的吞吐量。
你要找的是inter-process communication
。 Java提供的形式简单的IPC框架的Java RMI API 。 有如管道,套接字,消息队列(这些是所有的概念,显然,所以有实现这些框架)几个其他机制的进程间通信。
我觉得你的情况的Java RMI或一个简单的自定义套接字实现应该足够了。
与DataInput中的(输出)流,套接字到Java对象来回发送。 这比使用磁盘文件更容易,而且比Netty中容易得多。
我倾向于使用jGroup形成过程之间的本地集群。 它适用于节点(又名处理)在同一台机器上,在同一JVM中,甚至在不同的服务器上。
一旦你了解的基础知识很容易与它的工作,并具有选项居然在同一个JVM上运行两个或多个进程可以轻松方便地测试这些进程。
开销和等待时间是最小的,如果两者都在同一台机器上(约>为100ns的每次操作通常只有一个TCP rountrip)。
插座可能是一个更好的选择,我想。