我有以下情况:
我有2个JVM进程(实际上是2个java
进程单独运行,而不是2个线程)在本地计算机上运行。我们称它们ProcessA
为ProcessB
。
我希望他们彼此交流(交换数据)(例如,ProcessA
发送消息ProcessB
以执行某项操作)。
现在,我通过编写一个临时文件来解决此问题,并且这些过程会定期扫描此文件以获取消息。我认为这种解决方案不是很好。
什么是实现我想要的更好的选择?
Answers:
IPC的多个选项:
如果没有更多细节,基于裸网络的IPC方法似乎是最好的,因为它是:
话虽这么说,根据您的示例(仅要求其他进程执行操作),JMX对您也足够好。
我在github上添加了一个名为Mappedbus的库(http://github.com/caplogic/mappedbus),该库使两个(或更多)Java进程/ JVM通过交换消息进行通信。该库使用一个内存映射文件,并利用访存和易失性读/写来同步不同的读取器和写入器。我测量了使用此库的两个进程之间的吞吐量,该吞吐量为4000万条消息/秒,平均读取/写入一条消息的延迟为25 ns。
您正在寻找的是inter-process communication
。Java以Java RMI API的形式提供了一个简单的IPC框架。进程间通信还有其他几种机制,例如管道,套接字,消息队列(显然,这些都是概念,因此,有一些框架可以实现这些概念)。
我认为在您的情况下,Java RMI或简单的自定义套接字实现就足够了。
具有DataInput(Output)Stream的套接字,用于来回发送Java对象。这比使用磁盘文件更容易,比Netty容易得多。
我认为套接字可能是更好的选择。