IT修真院·小课堂丨互联网职业小课堂在线学习平台

课堂课题:

什么是RMI,什么是RPC,两者之间的区别是什么?

关联任务:

任务五

直播时间:

2019-07-27 15:00:00


课堂内容:

视频链接:

PPT链接:

提交按钮:

小课堂内容格式


标题:

【修真院xx(职业)小课堂】课题名称

开场语:

大家好,我是IT修真院XX分院第X期的学员XX,一枚正直纯洁善良的XX程序员,今天给大家分享一下,修真院官网XX(职业)任务X,深度思考中的知识点——XXX

(1)背景介绍:

背景介绍的时候,尽可能的要宽广,讲清楚来龙去脉,讲清楚为什么会需要这个技术。

(2)知识剖析:

讲知识点的时候,尽可能的成体系,学会成体系的去给别人介绍知识。现在很多做的都是零散的,没有分类。

(3)常见问题:

最少列出1个常见问题。

(4)解决方案:

写清楚常见问题的解决方案。

(5)编码实战:

尽可能的去寻找在真实项目中在用的。如果你能找到某个网站在用你说的知识点,这是最好的。学以致用,否则当成练习题就没有意义了。多准备一些demo,讲解过程中将知识点和demo结合,便于大家理解所讲解的知识点。

(6)拓展思考:

知识点之外的拓展思考,由分享人进行讲解,这些东西就是所谓的深度,也是一个人技术水准高低比较的表现。

(7)参考文献:

引入参加文献的时候,在引用的句子后面加上序号【1】。参考文献中列出详细来源。不要去抄别人的东西,这是一个基本的态度。

(8)更多讨论:

Q1:提问人:问题?
A1:回答人(可以是分享人,也可以是其他学员):回答
Q2:提问人:问题?
A2:回答人(可以是分享人,也可以是其他学员):回答
Q3:提问人:问题?
A3:回答人(可以是分享人,也可以是其他学员):回答

(9)鸣谢:

感谢XX、XX师兄,此教程是在他们之前技术分享的基础上完善而成。

(10)结束语:

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

什么是RMI,什么是RPC,两者之间的区别是什么?    

辅导师兄


【修真院Java小课堂】

 

    大家好,我是IT修真院武汉分院第18期的学员徐海鹏,一枚正直纯洁善良的Java程序员,今天给大家分享一下,修真院官网java任务七,深度思考中的知识点——什么是RMI,什么是RPC,两者之间的区别是什么?   


(1)背景介绍:

RPC是什么

RPC(Remote Procedure Call) 翻译过来叫远程过程调用,加上 Protocol 之后也可以叫远程过程调用协议,可以由不同的语言实现,根据维基百科的解释 —— RPC 指在分布式环境下,一个计算机程序能调用另一个不同地址空间里的方法(不同地址空间通常指局域网下的另一台计算机),但是编码的形式就像调用一个本地方法一样,程序员不用去关心背后的细节。


RMI是什么

Java RMI,即 远程方法调用(Remote Method Invocation),一种用于实现远程过程调用(RPC)(Remote procedure call)的Java API,能直接传输序列化后的Java对象和分布式垃圾收集。它的实现依赖于Java虚拟机(JVM),因此它仅支持从一个JVM到另一个JVM的调用。

(2)知识剖析:

客户端(Client)

桩(StubObject):远程对象在客户端上的代理

远程引用层(RemoteReference Layer):解析并执行远程引用协议

传输层(Transport):发送调用、传递远程方法参数、接收远程方法执行结果


服务端(Server)

骨架(Skeleton):读取客户端传递的方法参数,调用服务器方的实际对象方法,并接收方法执行后的返回值

远程引用层(Remote ReferenceLayer):处理远程引用语法之后向骨架发送远程方法调用

传输层(Transport):监听客户端的入站连接,接收并转发调用到远程引用


RMI远程访问基本流程

1). 服务端定义远程访问接口

2). 服务端通过RmiServiceExporter暴露服务接口

3). 客户端定义与服务端已暴露的相同接口

4). 客户端通过RmiProxyFactoryBean调用服务接口


RMI远程调用步骤:

方法调用从客户对象经占位程序(Stub)、远程引用层(Remote Reference Layer)和传输层(Transport Layer)向下, 传递给主机,然后再次经传 输层,向上穿过远程调用层和骨干网(Skeleton),到达服务器对象。

占位程序扮演着远程服务器对象的代理的角色, 使该对象可被客户激活。 远程引用层处理语义、管理单一或多重对象的通信,决定调用是发往一个服务器还是多个。传输层管理实际的连接,并且追追踪可以接受方法调用的远程对象。服务器端的骨干网完成对服务器对象实际的方法调用,并获取返回值。返回值向下经远程引用层、服务器端的传输层传递回客户端,再向上经传输层和远程调用层返回。最后,占位程序获得返回值。


注意

1、RMI是很难穿越防火墙的;

2、RMI是基于Java的,这意味着客户端和服务端必须都是采用Java开发的;

3、因为RMI使用了Java的序列化机制,所以通过网络传输的对象类型必须保证在调用的两端是相同的版本。

(3)常见问题:

1、客户端连接不到服务


2、RPC 和 RMI 的区别

(4)解决方案:

1、服务端没有运行,服务端防火墙限制


2、RPC 更像一种协议,可以跨语言实现,而 RMI 仅支持 Java,需要双方都运行在 JVM 中;RPC 通过传入 class 和methodName 的形式利用反射和代理类调用该方法;RMI 需要依靠方法签名去 lookUp,找到了该方法之后调用它;RMI 支持 Java 对象和基本数据类型,而 RPC 通常借助不同的序列化协议来进行网络传输,有编解码的过程

(5)编码实战:

我的GitHub项目地址:https://github.com/xuhaipeng91/Task/tree/master/TaskEight

(6)拓展思考:

1、分布式应用有哪些优点

    ● 降低耦合度,增删一个功能,不会影响其它功能模块

    ● 因为优点1的存在,对于团队来说,可以更好的分配开发任务,比如各个团队负责一个独立的模块,开发完成后,只需要利用webservice服务的形式将模块的功能以API的形式开放出来


2、REST 和 RPC 的区别

    ● REST 是一种架构风格,面向资源(由一个 URL 唯一指定),主要是名词,它很好的利用了 HTTP 中已有的请求方法(PUT、POST、GET、DELETE)做操作形式的区分;而 RPC 主要是动词组成,面向方法,例如方法名为 queryAllBooks,通过客户端和服务端共有的一个方法来进行调用,编码的时候可以像使用本地方法一样,编码效率更高。

    ● REST 基于 HTTP 传输协议,RPC 的传输协议可以不基于 HTTP,可以采用 TCP、UDP、HTTP、管道通信等技术去实现

后端服务间调用 RPC 性能通常更高,因为实现更底层、封装的数据量更小;而前端请求则通常采用 REST,因为一定要走 HTTP 协议

    ● 采用 REST 风格的 API,如果一旦要新增一个删除书籍的方法,那么 URL 地址依据不变,变化的仅是请求方法改为 DELETE;而 RPC 如果要增加这个方法,那么必须新建一个 deleteBook(int bookId) 的方法,客户端需要调用这个新方法达成功能但是因为 REST 基于 HTTP 协议,因此通常会有前端代理进行请求分发,这种前端代理层的水平扩展不太容易;但 RPC 服务借助注册中心可以轻易实现服务节点的增删和动态调整


3、什么是JMS

    ● JMS是java平台上的消息规范。一般JMS消息不是一个XML,而是一个Java对象。


4、JMS 与 RMI 的区别

    ● 采用 JMS 服务,对象是在物理上被异步从网络的某个 JVM 上直接移动到另一个 JVM 上。 
    ● 而 RMI 对象是绑定在本地 JVM 中,只有函数参数和返回值是通过网络传送的。

(7)参考文献:

    参考一:httpsblog.csdn.netchen_kkwarticledetails82823372

    参考二:https://www.jianshu.com/p/de85fad05dcb

(8)结束语:

        今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

评论

请您登录 后进行评论