请问Ja​​va RMI的意义是什么?


问题内容

人们为什么使用RMI,或者什么时候应该使用RMI?我在oracle网站上阅读了有关RMI的那些教程,但是没有提供足够的实际示例。

据我了解,软件应使其模块尽可能“无关且分开”。RMI某种程度上似乎是与我高度耦合的一个例子。为什么这不是不好的编码习惯?我认为客户端应该只触发指令,而对象的所有实际操作都是由服务器完成的。

(我目前正在攻读计算机科学学士学位,并且经验不足,因此,如果我理解错误的概念,请指正。)

提前致谢!


问题答案:

基本上由于您刚刚列出的原因,您实际上不应该将RMI用于今天构建的任何应用程序。

在某些情况下(分为传统应用程序或“企业”应用程序),您别无选择。

但是,如果您要开始一个新项目,则其他选项是:

通过HTTP的REST + JSON

事实标准,用于与远程服务进行通信。它的最大优点是重量轻且易于掌握该概念。

从理论上讲,它需要比RMI进行更多的工作,因为您必须手动制作可用的URL,每个URL中可接受的动词等。实际上,我会说RMI的样板并没有真正帮助任何人。

坚持使用Java,Jersey是一个出色的库,用于编写您自己的RESTful Web服务。

如果您希望使用Java的RESTful
Web服务包括电池的解决方案,Yammer的好朋友们提供的Dropwizard可以为您提供完整的服务器和框架,随时可以插入业务逻辑,并提供日志记录,数据库连接,序列化,请求路由和甚至是开箱即用的指标。

肥皂

与远程服务通信的先前标准。除非您有理由使用它,否则我会坚持使用REST。

节约

Thrift将创建一个客户端和一个服务器存根,基本上完成了许多工作。通信采用有效的二进制协议。它在Java世界中越来越流行,因为它在“大数据”领域中被许多开源项目所使用。例如,Cassandra,HBase(切换到Avro)。Scrooge是一个Twitter项目,用于为Scala创建惯用的节俭存根。

阿卡族演员

Akka是为Scala和Java
实现Actor模型的框架。包括用于服务间通信的条款,并在后台处理许多细节。一世


根据您的需求,某些会比其他人更合适。