当前位置: 首页 > 面试题库 >

本地JVM之间的通信

宦宏爽
2023-03-14
问题内容

我的问题: 在本地运行的两个或多个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库中的代码“注入”内存中,结果是您拥有一些可以满足接口但可以与远程对象通信的东西。



 类似资料:
  • 问题内容: 方法论问题: 我有一个“主” python脚本,该脚本在系统上无限循环地运行,并且我想偶尔与其他一些python脚本一起向其发送信息(例如,json数据字符串),这些脚本稍后将由本人或另一个程序启动并且将在发送字符串后立即结束。 我不能在这里使用子流程,因为我的主脚本不知道其他脚本何时运行以及它们将执行什么代码。 我正在考虑使主脚本在本地端口上侦听,并使其他脚本在该端口上向它发送字符串

  • 问题内容: 什么是HotSpot?它与JVM和OpenJDK有什么关系?是图书馆吗?它到底是做什么的? 另外,OpenJDK和HotSpot有什么区别? 问题答案: Java虚拟机规范中明确说明了什么是Java虚拟机 根据定义,JVM是虚拟机,即模拟真实计算机执行功能的软件计算机。就像真实的机器一样,它具有指令集,虚拟计算机体系结构和执行模型。它能够运行用该虚拟指令集编写的代码,非常类似于真实机器

  • 问题内容: JVM实现在哪些方面有所不同(许可除外)?每个JVM是否都为通用处理实现类型清除? 之间的区别在哪里: JRockit IBM JVM SUN JVM Open JDK power failure Kaffi .....处理其中之一的尾部呼叫优化吗? 问题答案: JVM实现在实现JIT编译,优化,垃圾回收,支持的平台,支持的Java版本等方面可以有所不同。它们都必须满足一组功能和行为,

  • 我有一个活动- 。在这个活动中,我有两个片段,这两个片段都是我在xml中以声明方式创建的。 我正在尝试将用户输入的文本的传递到Fragment B 我知道一个片段可以使用获得对其活动的引用。所以我猜我会从那里开始?

  • 本文向大家介绍iOS推送之本地通知UILocalNotification,包括了iOS推送之本地通知UILocalNotification的使用技巧和注意事项,需要的朋友参考一下 摘要: Notification是智能手机应用编程中非常常用的一种传递信息的机制,而且可以非常好的节省资源,不用消耗资源来不停地检查信息状态(Pooling),在iOS下应用分为两种不同的Notification种类,本