RMI

关于RMI

1.简介

         之前项目使用过RMI,借此机会学习一下

         Java RMI(Java Remote Method Invocation):用于实现远程过程调用的应用程序编程接口;使客户机上运行的程序可以调用远程服务器上的对象,以便分布式操作,宗旨是尽可能简化远程接口对象的使用; Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径

         Dubbo框架使用的RPC(Remote Procedure Call)也可以实现远程调用,RMI在RPC的基础上提供了分布式对象之间的通讯;允许运行在一个虚拟机的对象调用另一个虚拟机对象的方法;

2.原理

https://i-blog.csdnimg.cn/blog_migrate/71a367904eea55d08198e506d9a436ca.png

         Stub和Skeleton:这两个的身份是一致的,都是作为代理的存在。客户端成为Stub,服务端的称作Skeleton.要做到对程序员屏蔽远程调用方法的细节,代理必不可少,包括网络连接等细节;

         Registry:提供了服务名到服务的映射。

3.过程

         RMI由三个部分构成,RMIService是JDK提供的一个可以独立运行的程序,自己编写的RMIServer和自己编写的RMIClient;

         首先RMIService必须先启动并开始监听对应的端口.

         其次,RMIServer将自己提供的服务的实现类注册到RMIService上,指定一个访问的路径

         最后,RMIClient使用实现知道的路径到RMIServie上寻找这个服务,并使用这个服务在本地的接口调用服务方法;

4.问题

         发现之前写的代码服务端的接口的具体实现类并没有继承UnicastRemoteObject基类,而是只实现了接口,而接口只继承了Remote;因为UnicastRemoteObject基类里的exportObject方法可以导出远程对象,所以lookup方法出来的对象类型是代理对象而不是对象本身;对于RMI来说,客户端调用的只应该是远程对象的存根对象,以便客户端在调用的时候保证调用的是远程对象而不是新对象,代码将执行在服务端而非客户端;

5.RPC的对比

       1.方法的调用方式不同:

              RMI中是通过在客户端的stub对象作为远程接口进行远程方法调用.每个远程方法都具有方法签名.如果一个方法在服务器上执行,但是没有相匹配的签名被添加到代理远程接口上,则新方法不能被客户端调用;

              RPC中是通过网络服务协议向远程主机发送请求,请求包含了一个参数集合一个文本值,通常形成”classname.methidname(参数集)”的形式。RPC元混成主机去搜索与之相匹配的类和方法,找到后就执行方法把结果编码通过网络协议发回。

       2.使用语言范围不同

              RMI只是java

              RPC是网络服务协议,与操作系统和语言无关.

       3.调用结果的返回形式不同

              RMI的调用结果可以是对象类型或者是基本数据类型;统一由外部数据表示语言表示,这种语言抽象了字节序类和数据类型结构之间的差异;

                  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值