RPC 远程过程调用

RPC(Remote Procedure Call Protocol)远程过程调用协议,通过网络从远程计算机上请求调用某种服务。

一次RPC调用的过程大概有10步:

1.执行客户端调用语句,传送参数

2.调用本地系统发送网络消息

3.消息传送到远程主机

4.服务器得到消息并取得参数

5.根据调用请求以及参数执行远程过程(服务)

6.执行过程完毕,将结果返回服务器句柄

7.服务器句柄返回结果,调用远程主机的系统网络服务发送结果

8.消息传回本地主机

9.客户端句柄由本地主机的网络服务接收消息

10.客户端接收到调用语句返回的结果数据

RMI 远程方法调用

RMI:远程方法调用(Remote Method Invocation)。能够让在客户端Java虚拟机上的对象像调用本地对象一样调用服务端java 虚拟机中的对象上的方法。点击这里查看Dubbo架构详解。

RMI远程调用步骤:

1,客户调用客户端辅助对象stub上的方法

2,客户端辅助对象stub打包调用信息(变量,方法名),通过网络发送给服务端辅助对象skeleton

3,服务端辅助对象skeleton将客户端辅助对象发送来的信息解包,找出真正被调用的方法以及该方法所在对象

4,调用真正服务对象上的真正方法,并将结果返回给服务端辅助对象skeleton

5,服务端辅助对象将结果打包,发送给客户端辅助对象stub

6,客户端辅助对象将返回值解包,返回给调用者

7,客户获得返回值

RPC 与 RMI 的区别

1:方法调用方式不同

RMI中是通过在客户端的Stub对象作为远程接口进行远程方法的调用。每个远程方法都具有方法签名。如果一个方法在服务器上执行,但是没有相匹配的签名被添加到这个远程接口(stub)上,那么这个新方法就不能被RMI客户方所调用。点击这里查看Dubbo架构详解。

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

 

2:适用语言范围不同

RMI只用于Java;

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

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

Java是面向对象的,所以RMI的调用结果可以是对象类型或者基本数据类型;

RMI的结果统一由外部数据表示 (External Data Representation, XDR) 语言表示,这种语言抽象了字节序类和数据类型结构之间的差异。

一文告诉你 Java RMI 和 RPC 的区别!相关推荐

  1. 一文告诉你 Java RMI 和 RPC 的区别

    转载自  一文告诉你 Java RMI 和 RPC 的区别 RPC 远程过程调用 RPC(Remote Procedure Call Protocol)远程过程调用协议,通过网络从远程计算机上请求调用 ...

  2. c语言程序和plc程序的区别,一文告诉你PLC与计算机的本质区别在哪里!小白都能看懂!...

    原标题:一文告诉你PLC与计算机的本质区别在哪里!小白都能看懂! 你真的了解PLC吗?你知道PLC与计算机的本质区别吗?我来简单解释一下吧. 1.PLC可以工作在极其恶劣的电磁环境中 如果我们把计算机 ...

  3. Dubbo(一) 使用Java RMI 实现RPC(远程过程调用)

    Java RMI(Remote Method Invocation) 是jdk1.2 引入的一套Java自带 RPC实现方案. 实现过程如下: 一.远程服务端 编写远程接口继承java.rmi.Rem ...

  4. 堆和堆傻傻分不清?一文告诉你 Java 集合中「堆」的最佳打开方式

    上一篇的 「Java 集合框架」里,还剩下一个大问题没有说的,那就是 PriorityQueue,优先队列,也就是堆,Heap. 什么是堆? 堆其实就是一种特殊的队列--优先队列. 普通的队列游戏规则 ...

  5. java堆与非堆的一些研究_堆和堆傻傻分不清?一文告诉你 Java 集合中「堆」的最佳打开方式...

    什么是堆? 堆其实就是一种特殊的队列--优先队列. 普通的队列游戏规则很简单:就是先进先出:但这种优先队列搞特殊,不是按照进队列的时间顺序,而是按照每个元素的优先级来比拼,优先级高的在堆顶. 这也很容 ...

  6. JAVA数组首位末位互换_堆和堆傻傻分不清?一文告诉你 Java 集合中「堆」的最佳打开方式...

    上一篇的 「Java 集合框架」里,还剩下一个大问题没有说的,那就是 PriorityQueue,优先队列,也就是堆,Heap. 什么是堆? 堆其实就是一种特殊的队列--优先队列. 普通的队列游戏规则 ...

  7. 一文告诉你Java日期时间API到底有多烂

    前言 你好,我是A哥(YourBatman). 好看的代码,千篇一律!难看的代码,卧槽卧槽~其实没有什么代码是"史上最烂"的,要有也只有"史上更烂". 日期是商 ...

  8. java属于高级语言_一文告诉你java是高级语言吗?

    很多刚接触java的朋友可能会疑惑,java是高级语言吗? 可以肯定的说,Java语言是高级语言.Java和C都是计算机的高级语言.相对低级语言来说,高级语言更接近人类的思维方式,更容易理解和掌握,用 ...

  9. 一文告诉你Adam、AdamW、Amsgrad区别和联系 重点

    **序言:**Adam自2014年出现之后,一直是受人追捧的参数训练神器,但最近越来越多的文章指出:Adam存在很多问题,效果甚至没有简单的SGD + Momentum好.因此,出现了很多改进的版本, ...

最新文章

  1. 用ssh建立机器之间的信任机制
  2. 基于IAR上搭建开发MM32的环境
  3. 关闭串口_USART串口通信,DMA方式,一分钟从入门到大师
  4. 产品设计眼中的运营,互联网营销
  5. boost::spirit模块实现一个类似于 XML 的小型解析器的测试程序
  6. vmware + centos6设置桥接模式
  7. asp.net mvc项目中遇到的古怪的问题,(项目中有frame框架)
  8. java疑难杂症集锦之eclipse(持续更新中)
  9. spring学习笔记二(基于注解)
  10. 阿里云云计算 25 SLB的原理
  11. 503 service unavailable php,503service unavailable错误提示解决方法
  12. 沙盘模拟软件_重大消息:企业经营沙盘招新啦
  13. 【达内课程】酷跑项目:百度地图获取定位
  14. linux路由器还原,openwrt路由器恢复出厂设置的方法
  15. 按头安利 好看又实用的毛笔书法字体素材看这里
  16. div 添加失焦事件
  17. C++常用头文件——常用数学函数头文件
  18. 锂电池和锂离子电池的区别
  19. 傲慢与偏见之 - 轮到我们领先了
  20. 编译原理 实验三 LR(1)分析法 Java

热门文章

  1. springcloud的fallback与fallbackFactory
  2. RabbitMQ官方中文入门教程(PHP版) 第三部分:发布/订阅(Publish/Subscribe)
  3. 转发离线安装 Android Studio 更新
  4. cocos2d-x中几种存储数据的方式
  5. spring 源代码地址
  6. centos6 kvm网卡桥接
  7. Nginx 学习笔记(四) Nginx+keepalived
  8. iOS开发之自定义View
  9. 工具 - 资源共享 公布一个我的网盘.
  10. mysql查找执行效率慢的SQL语句