在纯Java环境中,Web服务和RMI有哪些优缺点?

11

在开发由同一家公司编写的Java分布式应用程序时,您会选择Web服务还是RMI?从性能、松耦合、易用性等角度来看,它们各自有什么利弊?是否有人会选择WS?您可以使用RMI构建面向服务的体系结构吗?

5个回答

9
我会尝试这么思考:
你是否要独立的服务相互运行,并且这些服务可能在未来被非Java应用程序访问?那就采用Web服务。
你只是想将一个应用程序的某些部分(请注意单数)分布在几个服务器上吗?那么选择RMI,您无需离开Java宇宙即可使所有内容紧密耦合在一起。

好的思考方式。还要不忘记与必须运行RMI注册表以查找服务所涉及的额外复杂性和麻烦。这至少需要打开一个附加端口,最坏的情况是由于托管注册表而出现问题。 - Boris Terzic

6

我会选择WS。

  • WS/RMI不太可能成为你的瓶颈。
  • 为什么要关闭未来可能使用的其他技术?
  • 如果客户端/服务器上的类版本不同步,RMI可能会出现问题。

并且...我最可能选择REST服务。


1
除非你实际进行了测量,否则无法确定它是否不太可能发生。 - Thorbjørn Ravn Andersen

2
如果你不需要与非Java系统交互,那么RMI会更好;代码量少、配置简单、带宽开销小。
如果你担心未来可能需要与非Java系统交互,可以考虑使用EJB3;它使用RMI,易于设置和部署,并且如果需要,可以轻松地将调用转换为Web服务。
无论你做什么,都不要自己创造东西;坚持使用标准。

应用程序可能没有在支持EJB的环境中运行。 - Thorbjørn Ravn Andersen

1

我的选择是:

标准的Java序列化 - 优点:在我看来,提供了最高的性能,实现简单(我使用Spring将本地接口公开为远程接口);缺点:序列化在不同的JVM版本之间无法工作。

二进制序列化(例如Jetty的Hessian)- 优点:与Java序列化具有相同的性能,并且可以在不同的JVM版本之间工作。

WS:仅在需要在不同平台之间进行互操作性时才使用Java + .net,否则它太重了。


1

RMI 是一种快速开发的传输协议,但我建议不要在生产环境中使用它。序列化兼容性问题可能会导致麻烦,您需要非常小心地协调部署。

WebServices 效率低下,是的,但可以通过增加硬件来解决。或者,使用纯粹、轻量级的 XML-over-HTTP,而不是完整的 SOAP/WSDL。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接