Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.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
Web services RMI与Web服务。什么';什么是Java2Java远程处理的最佳选择?_Web Services_Remoting_Jax Ws_Rmi - Fatal编程技术网

Web services RMI与Web服务。什么';什么是Java2Java远程处理的最佳选择?

Web services RMI与Web服务。什么';什么是Java2Java远程处理的最佳选择?,web-services,remoting,jax-ws,rmi,Web Services,Remoting,Jax Ws,Rmi,我对Web服务和RMI都是新手,我想知道在不同的Web应用程序之间进行远程处理的更好方法是什么,当这些应用程序都是用Java编写的,也就是说不同的编程语言无关紧要时(这将是WS的优势) 一方面,我猜在使用web服务时会有性能开销(有人有数字证明吗?),另一方面,在我看来,web服务的耦合要松散得多,可以用来实现更面向服务的体系结构(SOA)(这在RMI中是不可能的,对吧?) 虽然这是一个相当普遍的问题,你的看法是什么 谢谢我在RMI和Web服务方面的经验反映了您的上述猜测。一般来说,如果通信需求

我对Web服务和RMI都是新手,我想知道在不同的Web应用程序之间进行远程处理的更好方法是什么,当这些应用程序都是用Java编写的,也就是说不同的编程语言无关紧要时(这将是WS的优势)

一方面,我猜在使用web服务时会有性能开销(有人有数字证明吗?),另一方面,在我看来,web服务的耦合要松散得多,可以用来实现更面向服务的体系结构(SOA)(这在RMI中是不可能的,对吧?)

虽然这是一个相当普遍的问题,你的看法是什么


谢谢

我在RMI和Web服务方面的经验反映了您的上述猜测。一般来说,如果通信需求是针对复杂对象的,那么RMI的性能超过了web服务。需要为Web服务显式指定JEE接口规范


请注意,Web服务是可互操作的,而RMI则不是(就客户机和服务器技术而言)。当我有一个或多个外部合作伙伴正在实现接口时,我倾向于使用Web服务,但如果我控制连接的两端,则使用RMI。

使用Web服务还是更“本地”的方法也取决于环境。如果您必须通过代理或某些公司防火墙,则Web服务更有可能工作,因为它们仅依赖HTTP。RMI要求您为您的应用程序打开另一个端口,这在某些环境中可能很困难(但在技术上并非如此)

如果你知道这个问题不是问题,你应该考虑使用RMI。SOA与其说依赖于技术,不如说依赖于良好的服务设计。如果您有一个EJB容器,那么您可以通过RMI调用会话bean,并且如果确实需要的话,还可以将它们公开为web服务

性能取决于您计划交换的数据。如果您想将复杂的对象网络从一个应用程序发送到另一个应用程序,使用RMI可能会更快,因为它是以二进制格式传输的(通常)。如果您有某种文本/XML内容,web服务可能是等效的,甚至更快,因为这样您就根本不需要转换任何内容(用于通信)

HTH,

Martin

web服务确实允许松散耦合的体系结构。使用RMI,您必须确保类定义在所有应用程序实例中保持同步,这意味着您必须始终同时部署所有类定义,即使其中只有一个发生了更改(不一定,但由于串行UUID等原因,经常需要这样做)

此外,它的可伸缩性不是很强,如果您想要使用负载平衡器,这可能是一个问题


在我看来,RMI最适合于较小的本地应用程序,这些应用程序与internet无关,但仍需要解耦。我用它开发了一个处理电子通信的java应用程序,我对结果非常满意。对于需要更复杂部署和跨internet工作的其他应用程序,我宁愿使用web服务。

如果需要维护复杂状态,RMI可能是更好的方向

Spring远程处理怎么样。它将类似REST的HTTP协议与RMI的二进制格式相结合。非常适合我。

对于Spring远程处理(我猜你指的是HTTP调用程序),双方都应该使用Spring,如果可以讨论的话


对于Java-to-Java应用程序,RMI是一个很好的解决方案,如果客户端不在您的控制之下或可能移动到另一个平台,则应避免JAX-RPC或JAX-WS-For Java-to-Java通信。

WS优于RMI的一个优点是WS通过HTTP端口80/443工作,而HTTP端口通常不会在防火墙上被阻止,可以支持NAT等。 RMI有一个非常复杂的底层网络协议,它要求您打开RMI端口,如果客户端被NATT,也可能无法工作。 其次,对于RMI,您将slef限制为JAVA-JAVA通信,而对于WebService,则没有这样的限制。 通过网络调试Web服务要容易得多,因为数据是SOAP/HTTP,可以通过嗅探工具轻松捕获以进行调试。我不知道有什么简单的方法可以通过RMI做到这一点。 此外,RMI确实非常古老,在过去几年中没有受到太多的关注。在CORBA很强大的时候,它很强大,RMI和CORBA都是非常过时的技术。 最好的选择是REST风格的Web服务。

@Martin Klinge

“性能取决于您计划交换的数据。如果您想将复杂的对象网络从一个应用程序发送到另一个应用程序,使用RMI可能会更快,因为它是以二进制格式传输的(通常)。如果您有某种文本/XML内容,web服务可能会相当于或更快,因为这样您就根本不需要转换任何内容(用于通信)。”

据我所知,在序列化-反序列化过程中,性能问题会有所不同,换句话说,编组-解编组过程。顺便说一句,我不确定这两个术语是否相同 在分布式编程中,我谈论的不是在同一JVM中发生的过程,而是如何复制数据。它是按值传递或按引用传递。二进制格式对应于按值传递,这意味着以二进制文件将对象复制到远程服务器。如果您有任何疑问,我想听听

在编组-解编组或序列化-反序列化方面,以二进制格式发送和文本/xml内容之间有什么区别

我只是猜测。这并不取决于您发送的数据类型。无论您发送的数据类型是什么,它都将是编组-解编组过程的一部分,最终将以二进制文件的形式发送,对吗

干杯
哈基

作为一个春季偏执狂和SO的倡导者
org.springframework.remoting.rmi.RmiServiceExporter