Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java的RMI的优点_Java_Rmi - Fatal编程技术网

使用Java的RMI的优点

使用Java的RMI的优点,java,rmi,Java,Rmi,我正在尝试使用JavaRMI远程轮询队列。RMI是这样做的好方法吗?总的来说,与常规套接字编程相比,使用RMI有哪些优势?它在网络带宽使用方面是否更高效 RMI是这样做的好方法吗 可能是。RMI非常简单,并且受到许多框架的支持 总的来说,与常规套接字编程相比,使用RMI有哪些优势 简单适用于多种用途 它在网络带宽使用方面是否更高效 RMI是建立在常规套接字编程之上的,因此它的效率再高不过了。然而,就网络带宽而言,它比您使用自定义代码所能实现的性能差2-5倍,当然您需要使用自定义代码的情况除外。您

我正在尝试使用JavaRMI远程轮询队列。RMI是这样做的好方法吗?总的来说,与常规套接字编程相比,使用RMI有哪些优势?它在网络带宽使用方面是否更高效

RMI是这样做的好方法吗

可能是。RMI非常简单,并且受到许多框架的支持

总的来说,与常规套接字编程相比,使用RMI有哪些优势

简单适用于多种用途

它在网络带宽使用方面是否更高效

RMI是建立在常规套接字编程之上的,因此它的效率再高不过了。然而,就网络带宽而言,它比您使用自定义代码所能实现的性能差2-5倍,当然您需要使用自定义代码的情况除外。您正在发送大字节[]或字符串,这不会有多大区别

注意:这不是不使用RMI的好理由。除非你知道这将是一个问题,而且通常不是,否则使用更快的替代方案是不合理的

注意:如果您使用另一个序列化来使用RPC,它很可能会更高效。i、 几乎所有的替代方案都更有效

RMI是这样做的好方法吗

可能是。RMI非常简单,并且受到许多框架的支持

总的来说,与常规套接字编程相比,使用RMI有哪些优势

简单适用于多种用途

它在网络带宽使用方面是否更高效

RMI是建立在常规套接字编程之上的,因此它的效率再高不过了。然而,就网络带宽而言,它比您使用自定义代码所能实现的性能差2-5倍,当然您需要使用自定义代码的情况除外。您正在发送大字节[]或字符串,这不会有多大区别

注意:这不是不使用RMI的好理由。除非你知道这将是一个问题,而且通常不是,否则使用更快的替代方案是不合理的


注意:如果您使用另一个序列化来使用RPC,它很可能会更高效。i、 e.几乎所有的替代方案都更有效。

我想说RMI提供的最方便的优势是,在另一台机器上调用一个方法并通过网络返回对象是多么简单,让存根负责编组/解编组。但是,如果您做得很好,它肯定不会比在套接字上构建自己的低级通信层更有效:


不过,您的情况可能适合,在一台机器上使用pollQueue方法,它可以简单地将您存储在队列中的对象返回给调用Java应用程序。

我想说,RMI提供的最方便的优势是在另一台机器上调用方法并通过网络返回对象是多么简单,让存根负责编组/解编组。但是,如果您做得很好,它肯定不会比在套接字上构建自己的低级通信层更有效:


不过,您的情况可能适合,将pollQueue方法放在一台机器上,只需将您存储在队列中的对象返回给调用Java应用程序即可。

一如既往,答案取决于应用程序的需要以及您必须对其进行编码的时间/预算。尽管如此,我提出了这一观点

如果您需要同步远程过程调用,那么就简单性而言,您无法击败RMI。您可以删除一个接口,并使用它直接调用远程计算机上的对象。然而,这并不是没有开销的,因为除了阻塞本地机器上的调用线程,每个过程调用都会在远程机器上的新线程中运行,直到过程完成或失败。它还可能引入同步问题,这些问题很难排除链式RMI调用的故障,如果您不注意计划提供的对象上的线程安全,则可能导致多台计算机之间的死锁。如果您了解如何有效地使用Serializable或Externalizable,带宽就不会成为问题


但是,如果您需要对通过网络发送的数据进行完全的速度/性能或精细的控制,最好使用套接字并实现自己的回调。RMI本质上是同步的,但使用套接字,您可以以异步、事件驱动的方式来完成任务。但是,使用这种方法,将有更多的编码开销,如果需要实现的远程过程数量变大,则可能会变得非常繁琐。

一如既往,答案取决于应用程序的需要以及编码所需的时间/预算。尽管如此,我提出了这一观点

如果您需要同步远程过程调用,那么就简单性而言,您无法击败RMI。您可以删除一个接口,并使用它直接调用远程计算机上的对象。然而,这并不是没有开销的,因为除了blo之外,每个过程调用都在远程机器上的新线程中运行 在过程完成或失败之前,在本地计算机上检查调用线程。它还可能引入同步问题,这些问题很难排除链式RMI调用的故障,如果您不注意计划提供的对象上的线程安全,则可能导致多台计算机之间的死锁。如果您了解如何有效地使用Serializable或Externalizable,带宽就不会成为问题


但是,如果您需要对通过网络发送的数据进行完全的速度/性能或精细的控制,最好使用套接字并实现自己的回调。RMI本质上是同步的,但使用套接字,您可以以异步、事件驱动的方式来完成任务。但是,使用这种方法,将有更多的编码开销,如果需要实现的远程过程数量变大,则可能会变得非常繁琐。

RMI是使用简单与实现复杂之间的折衷。您是想自己花时间做所有低级别的套接字工作,还是想要一个已经可用并经过测试的解决方案的简单性?虽然我认为这不适合此类问题,但队列和消息传递是一个已解决的问题,例如,有很多实现,除了作为练习之外,编写自己的实现没有什么意义。RMI的一个缺点没有提到:很难通过非Java编写的任何东西来使用它。这个问题本不应该解决。这是一个非常有效的问题——RMI是否是一种处理远程事务的好方法?答案是,由于很多原因,它对任何事情都不好,其中一些你可以在这里找到。请在2017年使用任何东西,但不要使用RMI:RMI是使用简单性与实现复杂性之间的折衷。您是想自己花时间做所有低级别的套接字工作,还是想要一个已经可用并经过测试的解决方案的简单性?虽然我认为这不适合此类问题,但队列和消息传递是一个已解决的问题,例如,有很多实现,除了作为练习之外,编写自己的实现没有什么意义。RMI的一个缺点没有提到:很难通过非Java编写的任何东西来使用它。这个问题本不应该解决。这是一个非常有效的问题——RMI是否是一种处理远程事务的好方法?答案是,由于很多原因,它对任何事情都不好,其中一些你可以在这里找到。请在2017年使用任何东西,但不要使用RMI:我同意大部分这一点,但如果传递或返回单个字节,则10x因子可能是准确的,否则它只是未经证实的FUD。不适当地使用SSL也会导致43倍的爆炸,但这不是避免SSL的原因。@EJP我不是说您应该避免RMI,如果您发送字符串或字节[]之类的大型简单数据类型,则没有多大区别。你是对的,10倍是一种夸张。2-5倍的可能性更大。添加了您的注释,指出这不是不使用它的好理由。我同意大部分这一点,但如果您传递或返回单个字节,则10x因子可能是准确的,否则它只是未经证实的FUD。不适当地使用SSL也会导致43倍的爆炸,但这不是避免SSL的原因。@EJP我不是说您应该避免RMI,如果您发送字符串或字节[]之类的大型简单数据类型,则没有多大区别。你是对的,10倍是一种夸张。2-5倍的可能性更大。添加了您的注释,说明这不是不使用它的好理由。