本地JVM之间的通信

26

我的问题:在本地运行的两个或多个JVM实例之间进行通信,我应该采取什么方法?

问题描述:
我正在为一个需要将某些任务完全隔离的项目开发系统,需要使用单独的JVM实例。

在运行中,“父”JVM将创建“子”JVM,预计它将执行并返回结果(以相对简单的POJO类或结构化XML数据的格式)。这些结果不应使用SysErr / SysOut / SysIn管道传输,因为子进程可能已经将其作为其运行的一部分使用。

如果子JVM在一定时间内没有响应结果,则父JVM应能够向子JVM发出信号以停止处理或杀死子进程。否则,在完成其任务后,子JVM应正常退出。

研究工作:
我知道有许多技术可以使用,例如...

  • 使用Java的RMI库
  • 使用套接字传输对象
  • 使用分布式库,如Cajo、Hessian

...但我想听听其他人在追求这些选项或其他任何选项之前可能考虑的方法。

感谢您提供的任何帮助或建议!

编辑:
要传输的数据量-相对较小,它将主要是一些包含字符串的POJO,表示子进程执行结果。如果任何解决方案在较大数据量上效率低下,则这在我的系统中不太可能成为问题。要传输的数量应该是固定的,因此这不需要具有可扩展性。

传输延迟-在这种情况下不是关键问题,尽管如果需要“轮询”结果,则应该能够相当频繁地进行,而没有显着的开销,因此我可以在以后维护一个响应式图形界面(例如进度条)。


也许您可以谈谈需要传输多少数据以及延迟有多重要?除非您有重大的性能限制,否则无论您认为最简单的解决方案可能是最好的。 - Peter Lawrey
@Peter Lawrey,我已经为您添加了一些额外的细节,谢谢! - obfuscation
11个回答

0

我尝试使用套接字和Protobuf,但是要使其正常工作非常困难,因为您需要能够在接收后将输出重定向到正确的类,但要做到这一点,您需要从缓冲区读取字段。您可以使用CodedInputStream,但这不是很好。最好使用bean并对其进行序列化。 - Chris Dennett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接