RMI方式的调用,如:rmi://10.20.134.140:2099/DataServer

1.Java RMI 简介

RMI(Remote Method Invocation),RMI是分布式对象软件包,它简化了在多台计算机上的JAVA应用之间的通信。
必须在jdk1.1以上,RMI用到的类:
java.rmi.Remote 所有可以被远程调用的对象都必须实现该接口
java.rmi.server.UnicastRemoteObject 所有可以被远程调用的对象都必须扩展该类
什么是RMI ?
远程方法调用是一种计算机之间对象互相调用对方函数,启动对方进程的一种机制,使用这种机制,某一台计算机上的对象在调用另外一台计算机上的方法时,使用的程序语法规则和在本地机上对象间的方法调用的语法规则一样。
再看一下wikipedia上的简介吧:
TheJava Remote Method InvocationApplication Programming Interface (API), or Java RMI,is a Java application programming interface that performs the object-oriented equivalent of remote procedure calls (RPC).

  1. The original implementation depends on Java Virtual Machine (JVM) class representation mechanisms and it thus only supports making calls
    from one JVM to another. The protocol underlying this Java-only
    implementation is known as Java Remote Method Protocol (JRMP).
    2. In order to support code running in a non-JVM context, a CORBA version was later developed. Usage of the term RMI may denote solely
    the programming interface or may signify both the API and JRMP,
    whereas the term RMI-IIOP (read: RMI over IIOP) denotes the RMI
    interface delegating most of the functionality to the supporting CORBA
    implementation. The programmers of the original RMI API generalized
    the code somewhat to support different implementations, such as a HTTP
    transport. Additionally, the ability to pass arguments “by value” was
    added to CORBA in order to support the RMI interface. Still, the
    RMI-IIOP and JRMP implementations do not have fully identical
    interfaces.

2.RMI的优势

这种机制给分布计算的系统设计、编程都带来了极大的方便。只要按照RMI规则设计程序,可以不必再过问在RMI之下的网络细节了,如:TCP和Socket等等。任意两台计算机之间的通讯完全由RMI负责。调用远程计算机上的对象就像本地对象一样方便。
1、面向对象:
RMI可将完整的对象作为参数和返回值进行传递,而不仅仅是预定义的数据类型。也就是说,可以将类似Java Hash表这样的复杂类型作为一个参数进行传递。
2、可移动属性:
RMI可将属性从客户机移动到服务器,或者从服务器移动到客户机。
3、设计方式:
对象传递功能使你可以在分布式计算中充分利用面向对象技术的强大功能,如二层和三层结构系统。如果用户能够传递属性,那么就可以在自己的解决方案中使用面向对象的设计方式。所有面向对象的设计方式无不依靠不同的属性来发挥功能,如果不能传递完整的对象——包括实现和类型——就会失去设计方式上所提供的优点。
4、安全性:
RMI使用Java内置的安全机制保证下载执行程序时用户系统的安全。RMI使用专门为保护系统免遭恶意小程序侵害而设计的安全管理程序。
5、便于编写和使用
RMI使得Java远程服务程序和访问这些服务程序的Java客户程序的编写工作变得轻松、简单。远程接口实际上就是Java接口。为了实现RMI的功能必须创建远程对象任何可以被远程调用的对象必须实现远程接口。但远程
接口本身并不包含任何方法。因而需要创建一个新的接口来扩展远程接口。
新接口将包含所有可以远程调用的方法。远程对象必须实现这个新接口,由于新的接口扩展了
远程接口,实现了新接口,就满足了远程对象对实现远程接口的要求,所实现的每个对象都将
作为远程对象引用。
一个国外的PPT上还还总结到,

Java RMI Advantages:
Full object support
Cross platform. capabilities
Robust communications
Large objects
Security for client and servers
Distribution/updates of codes

3.RMI的劣势

从上面的过程来看,RMI对服务器的IP地址和端口依赖很紧密,但是在开发的时候不知道将来的服务器IP和端口如何,但是客户端程序依赖这个IP和端口。这也是RMI的局限性之一。这个问题有两种解决途径:一是通过DNS来解决,二是通过封装将IP暴露到程序代码之外。
RMI的局限性之二是RMI是Java语言的远程调用,两端的程序语言必须是Java实现,对于不同语言间的通讯可以考虑用Web Service或者公用对象请求代理体系(CORBA)来实现。
一个国外的PPT上也总结到,

Java RMI Disadvantages:
Java RMI only supports Java
Proprietary protocol by single vendor
Requires RMI-lookup
Requires non-standard port

4.RMI与Socket的比较

RMI技术比较socket的网络编程主要有以下几个方面:
第一、RMI是面向对象的,而后者不是。
第二、RMI是与语言相绑定的。
比如当你使用Java RMI技术的时候,客户端与服务器端都必须使用Java开发。而socket的网络编程是使用独立于开发语言的,甚至独立于平台。基于socket的网络编程,客户端与服务器端可以使用不同开发语言和不同的平台。
第三、从网络协议栈的观点来看,RMI与socket的网络编程处于不同层次上。
基于socket的网络编程位于TCP协议之上,而RMI在TCP协议之上,又定义了自己的应用协议,其传输层采用的是Java远程方法协议(JRMP)。可见,在网络协议栈上,基于RMI的应用位置更高一些,这也决定了,与socket的网络编程相比,RMI会丧失一些灵活性和可控性,但是好处是它带给了应用开发者更多的简洁,方便和易用。比如:如果你用的是RMI,你不需要关心消息是怎么序列化的,你只需要像本地方法调用一样,使用RMI。代价是:应用开发者无法很好地控制消息的序列化机制。
第四、性能
这是最后一点不同,我认为也是比较重要的一点,就是两种方法的性能比较,其往往决定着你将使用那种技术来开发你的应用。
实验的结果是:RMI与TCP based socket相比,传输相同的有效数据,RMI需要占用更多的网络带宽(protocol overhead)。从这里,我们可以得出一个一般性的结论:RMI主要是用于远程方法的”调用“(RMI是多么的名符其实:)),其技术内涵强调的是 “调用”,基于此,我能想到的是:移动计算,和远程控制,当你的应用不需要在client与server之间传输大量的数据时,RMI是较好的选择,它简洁、易于开发。但是,一旦你的应用需要在client与server之间传输大量的数据,极端的,比如FTP应用,则RMI是不适合的,我们应该使用 socket。

PS: RMI的效率还是很高的,一般情况下会比Hessian更高效,比Web Service更是高效很多;当然和socket这种东东相比,当然要低效一点了,socket更底层一些啊。RMI的具体实现,依然是依赖于底层的Socket编程。

参考资料:
http://java.sun.com/developer/onlineTraining/Programming/JDCBook/rmi.html
http://en.wikipedia.org/wiki/Java_remote_method_invocation
http://csevan.javaeye.com/blog/284613
http://dev.firnow.com/course/3_program/java/javajs/2009110/154540.html

http://developer.51cto.com/art/200906/130417.htm (这篇非常不错:用RMI实现基于Java的分布式计算)

本文转自:https://blog.csdn.net/mingtianhaiyouwo/article/details/50513577

JAVA RMI简介与优缺点分析相关推荐

  1. 【Android Protobuf 序列化】Protobuf 简介 ( Protobuf 项目简介 | Protobuf 优缺点分析 )

    文章目录 一.Protobuf 简介 二.Protobuf 优缺点分析 1.Protobuf 优点 2.Protobuf 缺点 三.参考资料 一.Protobuf 简介 Protobuf 是 Goog ...

  2. 【机器学习】 主流机器学习算法简介与其优缺点分析

    来源:EliteDataScience   专知 机器学习算法的分类是棘手的,有几种合理的分类,他们可以分为生成/识别,参数/非参数,监督/无监督等. 例如,Scikit-Learn的文档页面通过学习 ...

  3. java rmi反序列化漏洞 简介

    目录 一.RMI简介 二.RMI示例 三.漏洞复现 四.漏洞分析 1.为什么这里的badAttributeValueExpException对象是通过反射构造,而不是直接声明? 2.为什么不直接将ba ...

  4. Java RMI(远程方法调用) 实例与分析 (转)

    目的: 通过本文,可以加深对Java RMI的理解,知道它的工作原理,怎么使用等. 也为了加深我自己的理解,故整理成文.不足之处,还望指出. 概念解释: RMI(RemoteMethodInvocat ...

  5. Java:计算机编程语言Java的简介、安装(编程环境/工具)、学习路线(如何学习Java以及几十项代码编程案例分析)之详细攻略

    Java:计算机编程语言Java的简介.安装(编程环境/工具).学习路线(如何学习Java以及几十项代码编程案例分析)之详细攻略 目录 Java的简介 1.Java的工作原理--基于Eclipse等编 ...

  6. java继承的优缺点分析

    java继承的优缺点分析 1.优点 提高了代码的再利用性. 提高了代码的维护性. 让类与类有关,是多态的前提. 2.缺点 提高类的耦合性.这样一个类的变化会影响其他与此类相关的类别. 原则:低耦合,高 ...

  7. java 设计模式 优缺点_java设计模式2:原型模式(机制\优缺点分析\使用场景)...

    1. 原型模式实现机制 原型模式在设计模式中相对比较简单,它直接通过实现 Cloneable接口,再重写 clone()方法返回想要的对象就OK 了. 一起来看下代码 : public class P ...

  8. JDK14中的java tools简介

    文章目录 故事发生了 java tools简介 jaotc jar jarsigner java javac javadoc javap jcmd jconsole jdb jdeprscan jde ...

  9. 基于java的采购管理系统的分析与实现(含源文件)

    欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 采购管理系统的分析与实现 摘 要 当今社会己进入信息社会时代,信息己经受到社会的广泛关注,被看作 ...

最新文章

  1. 包打包和解析过程 unity_解决Unity2018打包,提示 SDK Tools version 0.0.0 < 26.1.1
  2. 关于指针的一点小的理解
  3. TensorFlow2简单入门-加载及预处理文本
  4. 信息学奥赛一本通 1075:药房管理 | OpenJudge NOI 1.5 23:药房管理
  5. 881.BoatstoSavePeople
  6. 第7章—SpringMVC高级技术—不用web.xml,而使用java类配置SpringMVC
  7. PHP 数组常用操作函数随记
  8. oracle表级附加日志视图,Oracle附加日志
  9. 【安全狐】CVE-2015-5254_ActiveMQ反序列化漏洞复现
  10. 一个js写的爱心表白神器
  11. 最短剩余时间调度算法_LRTF:最长剩余时间优先调度算法
  12. (014) 类函数和对象函数
  13. 【机智云专题】①:乐鑫esp8266巧用机智云自动代码生成功能,移植加入驱动单路继电器,实现智能定时插座。(附带demo)
  14. Tkinter(二) | 点击按钮显示图片
  15. Linux上安装VIM
  16. 微信小程序快速提升访问量
  17. strcmp函数实现及分析
  18. yolov5昆虫识别模型测试
  19. 学习Linux目录和文件管理
  20. business,firm, company, corporation, enterprise等区别CentOS(Community Enterprise Operating System)想到

热门文章

  1. 【HDU】4411 Arrest 费用流
  2. 快播创始人王欣再复出,创造新式播放器,看到功能后网友们沸腾了
  3. Waffle Nano初相识
  4. 网上图书店的设计与实现
  5. round在python是什么意思_python – round()和numpy.round()之间的底层差异是什么?
  6. 学习动态代理stepbystep(3)
  7. 蝴蝶飞舞flash时钟屏保
  8. 读书笔记:3层神经网络的Python实现 ← 斋藤康毅
  9. 该死的dudu加速器广告终于被清除了
  10. 动作检测py-y5-kapao