远程过程调用
此条目需要扩充。 (2018年9月15日) |
此条目没有列出任何参考或来源。 (2018年9月15日) |
分布式计算中,远程过程调用(英语:Remote Procedure Call,RPC)是一个电脑通信协议。该协议允许运行于一台电脑的程序调用另一个地址空间(通常为一个开放网络的一台电脑)的子程序,而程序员就像调用本地程序一样,无需额外地为这个交互作用编程(无需关注细节)。RPC是一种伺服器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行资讯交互的系统。
如果涉及的软件采用面向对象编程,那么远程过程调用亦可称作远程调用或远程方法调用,例:Java RMI。
RPC是一种进程间通信的模式,程序分布在不同的地址空间里。如果在同一主机里,RPC可以通过不同的虚拟地址空间(即便使用相同的物理地址)进行通讯,而在不同的主机间,则通过不同的物理地址进行交互。许多技术(通常是不兼容)都是基于这种概念而实现的。
历史起源
有关RPC的想法至少可以追溯到1976年以“信使报”(Courier)的名义使用。RPC首次在UNIX平台上普及的执行工具程序是SUN公司的RPC(现在叫ONC RPC)。它被用作SUN的NFC的主要部件。ONC RPC今天仍在伺服器上被广泛使用。 另一个早期UNIX平台的工具是“阿波罗”电脑网络计算系统(NCS),它很快就用做OSF的分布计算环境(DCE)中的DCE/RPC的基础,并补充了DCOM。
资讯传递
远程过程调用是一个分布式计算的客户端-伺服器(Client/Server)的例子,它简单而又广受欢迎。远程过程调用总是由客户端对伺服器发出一个执行若干过程请求,并用客户端提供的参数。执行结果将返回给客户端。由于存在各式各样的变体和细节差异,对应地派生了各式远程过程调用协议,而且它们并不互相兼容。
流程
- 客户端调用客户端stub(client stub)。这个调用是在本地,并将调用参数push到栈(stack)中。
- 客户端stub(client stub)将这些参数包装,并通过系统调用发送到服务端机器。打包的过程叫 marshalling。(常见方式:XML、JSON、二进制编码)
- 客户端本地操作系统发送资讯至伺服器。(可通过自定义TCP协议或HTTP传输)
- 伺服器系统将资讯传送至服务端stub(server stub)。
- 服务端stub(server stub)解析资讯。该过程叫 unmarshalling。
- 服务端stub(server stub)调用程序,并通过类似的方式返回给客户端。
标准化的沟通机制
为了允许不同的客户端均能访问伺服器,许多标准化的 RPC 系统应运而生了。其中大部分采用接口描述语言(Interface Description Language,IDL),方便跨平台的远程过程调用。
参见
- 本地过程调用
- 进程间通信
- 开放网络运算远程过程调用(ONC RPC)
- DCE/RPC
- JSON-RPC