以下内容转自:黑马
什么是RPC
远程过程调用(Remote Procedure Call)是计算机通信协议,该协议允许一台计算机的程序调用另一台计算机的子程序.
广义
我们可以将所有通过网络进行通讯调用的实现统称为RPC 按这样理解,我们常用的HTTP通讯也算是一种RPC实现
狭义
区别于HTTP的实现,在传输的数据格式上和传输的控制上独立实现,比如在机器间通讯传输的数据不采用http协议的方式(起始行/header/body),而是使用自定义格式的二进制方式,我们更多时候谈到PRC都是指这种狭义上的理解
优缺点
优点:
- 效率高
- 发起RPC调用的一方在编写代码时可忽略RPC的具体实现,如同编写本地函数调用一样 缺点:
- 通用性不如HTTP好,因为传输的数据不是HTTP协议格式,所以调用双方需要专门实现通信库,对于不同语言都需要相关的实现,而HTTP作为一个标准协议,大部分语言都有相关的实现通用性更好
侧重点
- HTTP更多面向用户与产品服务器的通讯
- RPC更多的面向产品内部服务器间的通讯
RPC结构
PRC设计思想是力图使远程调用中的通讯细节对于使用者透明,调用双方无需关心网络通讯的具体实现,因而实现RPC要进行一定的封装。原理结构如下:
流程:
-
- 调用者(Caller也称为客户端/Client)以本地调用的方式发起调用
-
- Clinet stub(客户端存根)将Caller调用的方法名和参数打包成特定格式网络传输消息体并通过网络将打包的消息体发送给对端
-
- Server stub 收到消息体后进行解码,获取方法名和参数传给被调用者(Callee/Server)
-
- 被调用者(Callee)本地调用执行后将结果返回给Server stub
-
- Server stub 收到返回结果打包编码发送给对端
-
- Clinet stub 解码返回给,Client