我有以下情况:

我在本地计算机上运行2个JVM进程(实际上是2个java进程单独运行,而不是2个线程)。我们称它们为ProcessAProcessB

我希望他们彼此通信(交换数据)(例如ProcessAProcessB发送一条消息以执行某项操作)。

现在,我通过编写一个临时文件来解决此问题,并且这些过程会定期扫描此文件以获取消息。我认为这种解决方案不是很好。

什么是实现我想要的更好的选择?

最佳答案

IPC的多个选项:
基于套接字的(裸骨)网络

  • not necessarily hard,但是:
  • 可能很冗长,
  • 随着您编写更多代码,
  • 可能会为错误提供更多信息。

  • 您可以依赖现有的框架,例如Netty

  • RMI
  • 从技术上讲,这也是网络通信,但对您而言是透明的。

  • 完善的消息传递体系结构
  • 通常也以RMI或网络通信为基础,但支持复杂的对话和工作流
  • 对于简单的
  • 而言可能太重了
  • 框架,例如ActiveMQJBoss Messaging

  • Java Management Extensions (JMX)
  • 更适用于JVM management and monitoring,但如果您最想让一个进程查询另一个进程以获取数据,或者向其发送一些操作请求(如果它们不是太复杂的
  • ),则可以帮助实现所需的功能。
  • 也可以通过RMI(以及其他可能的协议(protocol))使用
  • 一开始并不容易,但是actually rather simple to use

  • 文件共享/文件锁定
  • 这就是您现在正在做的事情
  • 是可行的,但是在处理
  • 时会遇到很多问题

    讯号
  • 您可以简单地将信号发送到其他项目
  • 但是,它是相当有限的,需要您实现翻译层(尽管可行的,但是比起任何严肃的事情,这是一个非常疯狂的想法。)

  • 如果没有更多细节,基于裸网络的IPC方法似乎是最好的,因为它是:
  • 最可扩展(就向
  • 添加新功能和工作流程而言
  • 最轻量(就应用程序的内存占用而言)
  • 最简单(就设计而言)
  • 最有教育意义(在学习如何实现IPC方面)。 (正如您在评论中提到“socket很难”,但实际上并非如此,应该由您来解决)

  • 话虽这么说,根据您的示例(仅要求其他进程执行操作),JMX对您也足够好。

    09-07 19:29