【发布时间】:2011-06-30 10:35:28
【问题描述】:
我的问题:我可以/应该采取什么方法在本地运行的两个或多个 JVM 实例之间进行通信?
问题的一些描述:
我正在为一个项目开发一个系统,该项目需要单独的 JVM 实例来完全隔离某些任务。
在它运行时,“父”JVM 将创建它期望执行的“子”JVM,然后将结果返回给它(以相对简单的 POJO 类的格式,或者可能是结构化的 XML 数据)。不应使用 SysErr/SysOut/SysIn 管道传输这些结果,因为子进程可能已经将它们用作其运行的一部分。
如果子 JVM 在一定时间内没有响应结果,父 JVM 应该能够向子 JVM 发出信号以停止处理,或终止子进程。否则,子 JVM 应该在完成其任务结束时正常退出。
迄今为止的研究:
我知道有许多技术可能有用,例如......
- 使用 Java 的 RMI 库
- 使用套接字传输对象
- 使用分发库,例如 Cajo、Hessian
...但我很想听听其他人在选择其中一个或任何其他选项之前可能会考虑哪些方法。
感谢您对此的任何帮助或建议!
编辑:
要传输的数据量-相对较小,主要是少数 POJO,其中包含表示子结果的字符串执行。如果任何解决方案在处理大量信息时效率低下,这不太可能在我的系统中成为问题。转移的金额应该是相当静态的,所以这不是必须是可扩展的。
传输延迟-在这种情况下不是一个关键问题,尽管如果需要对结果进行任何“轮询”,这应该能够相当频繁,而不会产生大量开销,因此我可以保持响应稍后在此之上的 GUI(例如进度条)
【问题讨论】:
-
也许您可以谈谈您需要传输多少数据以及延迟有多重要?除非您有明显的性能限制,否则您认为最简单的解决方案可能是最好的。
-
@Peter Lawrey 我已经为你添加了一些额外的细节,谢谢!