rpc(远程过程调用)是一个古老而新颖的名词,他几乎与http协议同时或更早诞生,也是互联网数据传输过程中非常重要的传输机制。
利用这种传输机制,不同进程(或服务)间像调用本地进程中的方法一般进行交互,而无需关心实现细节。
rpc的主要实现流程为:
![1f645b1b6006cf8c5af1020faf1204b2.png](https://i-blog.csdnimg.cn/blog_migrate/e4844bda2d61ba25e89560edc3b78280.jpeg)
1、客户端本地方法调用客户端stub(方法存根)。这个调用发生在客户端本地,并把调用参数推送到栈中。
2、客户端stub (方法存根)将这些参数打包,通过系统调用发送到服务器机器。打包的过程通常可以采用xml、json、二进制编码。打包的过程被称为marshalling。
3、客户端本地操作系统发送信息到目标服务器(可以通过自定义tcp协议或Http协议传输)。
4、服务器系统将信息传送到服务端stub(方法存根)
5、服务端stub (服务端方法存根) 解析信息。解析信息的过程可以称为 unmarshalling。
6、服务器stub (服务端方法存根) 调用程序,并通过类似的方式返回客户端。
为了让不同的客户端均能访问服务器,许多标准化的rpc组件往往会使用接口描述语言的形式,以便方便跨平台、跨语言的远程过程调用的实现。
图1:RPC 调用流程
参考维基百科:https://zh.wikipedia.org/wiki/%E9%81%A0%E7%A8%8B%E9%81%8E%E7%A8%8B%E8%AA%BF%E7%94%A8
二、什么时候使用RPC?
HTTP和RPC是现代微服务架构中普遍采用的两种数据传输方式,在某种场合几乎都是可以完全替换的,但又具有各自不同的特点。
1、HTTP协议是一种规范、开放、通用性非常强、标准的传输协议,几乎所有的语言都支持,如果要确保各类平台都能无缝的访问数据,可以考虑使用HTTP协议。例如目前常用的RestFul规约,定义好请求方法、数据格式并以Json的形式返回参数,能够让前后端之间的对接非常便捷;之前的开发者或许用wsdl、so