远程过程调用(Remote Procedure Call,缩写为RPC)是一个计算机通信协议。该协议允许运行在一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。如果涉及的软件采用面向对象编程,那么远程过程调用亦可称作远程调用或远程方法调用,比如Java RMI。
远程过程调用是一个分布式计算的客户端-服务器(Client/Server)的例子,它简单而又广受欢迎。远程过程调用总是由客户端对服务器发出一个执行若干过程请求,并用客户端提供的参数。执行结果将返回客户端。由于存在各式各样的变体和细节差异,对应地派生了各式远程过程调用协议,而且他们并不互相兼容。
为了允许不同的客户端均能访问服务器,许多标准化的RPC系统应运而生了。其中大部分采用接口描述语言(Interface Description Language,IDL),方便夸平台的远程过程调用。
从上图可以看出,RPC本身是client-server模型,也是一种request-response协议。
有些实现扩展了远程调用的模型,实现了双向的服务调用,但是不管怎样,调用过程还是由一个客户端发起,服务器端提供响应,基本模型没有变化。
服务的调用过程为:
1.client调用client stub,这是一次本地过程调用
2.client stub将参数打包成一个消息,然后发送这个消息。打包过程也叫做marshalling
3.client所在的系统将消息发送给server
4.server的系统将收到的包传给server stub
5.server stub解包得到参数。解包也被称作unmarshalling
6.最后server stub调用服务过程返回结果按照相反的步骤传给client