本地JVM之间的通信
在本地运行的两个或多个JVM实例之间进行通信应该/应该采用哪种方法?
我正在为一个项目开发系统,该项目需要单独的JVM实例以完全将某些任务彼此隔离。
在运行时,“父” JVM将创建期望执行的“子” JVM,然后将结果返回给它(以相对简单的POJO类或结构化XML数据的格式)。这些结果不应使用SysErr
/ SysOut / SysIn管道进行传输,因为子级可能已经将这些结果用作其运行的一部分。
如果子JVM在一定时间内未对结果做出响应,则父JVM应该能够向子信号发出停止处理或终止子进程的信号。否则,子JVM应该在完成其任务结束时正常退出。
我知道可能有许多技术可以使用,例如…
- 使用Java的RMI库
- 使用套接字传输对象
- 使用分发库,例如Cajo,Hessian
…但是有兴趣在寻求这些选择之一或任何其他选择之前,先听取他人可能考虑的方法。
感谢您对此的任何帮助或建议!
相对较小,大部分将只是少数POJO,其中包含表示子项执行结果的字符串。如果有任何解决方案无法处理大量信息,那么这在我的系统中就
不太可能 成为问题。被转移的量应该是相当静态的,因此这并 没有 必须具有可扩展性。
在这种情况下不是关键问题,尽管如果需要对结果进行任何“轮询”,这应该能够相当频繁地进行,而不会产生大量开销,因此以后我可以在此之上维护一个响应式GUI(例如进度条)
回答:
我将KryoNet与本地套接字一起使用,因为它非常专注于序列化并且非常轻巧(您还将获得Remote
Method Invocation!我现在正在使用它),但是禁用套接字断开连接超时。
RMI基本上是根据您具有远程类型并且该远程类型实现接口的原理工作的。该接口是共享的。在本地计算机上,您通过RMI库将接口绑定到RMI库中的代码“注入”内存中,结果是您拥有一些可以满足接口但可以与远程对象通信的东西。
以上是 本地JVM之间的通信 的全部内容, 来源链接: utcz.com/qa/405045.html