产生动因:

1、开发基于SOCKET的网络软件非常复杂(如:FTP、TELNET),2、位于不同机器上的软件互操作困难(如:连接管理、异构)。从而导致RPC(Remote Procedure Calling )的产生。

工作原理:

以对某银行帐户的一个存款过程为例:

 

RPC1调用过程:

RPC2 

如上图所示,共分为如下几步:

1)客户按本地调用的方式直接调用本地的客户指代,客户指代具有与服务器相同的过程接口

2)客户指代 将客户的调用请求进行加工、打包向底层通信机制(如套接字)发出请求消息,客户指代不进行任何逻辑处理,只是一个中介

3)客户端通过底层的通信机制将消息传送给服务器端的底层通信机制

4)服务器 需要部分地解析消息,找出客户希望调用的服务器程序

5)服务器指代对消息进行解析,从中获得调用者的参数,然后调用服务器程序

6)服务器程序执行相应的过程

7)服务器程序将结果返回给服务器指代

8)服务器指代将结果打包,向底层通信机制发出应答消息

9)服务器端通信机制将消息传送给客户端通信机制

10)客户端节点上也可能有多个调出点,通信机制需要部分地解析返回的消息,找出消息应该返回给哪个客户程序,并将消息发送给对应的客户指代

11)客户指代从消息中解析结果,返回给客户程序

其中,客户端指代(Stub)的主要工作包括:

1)建立客户与服务器之间的连接

2)将客户的高层调用语句打包为一条底层的请求消息

这一过程在RPC中被称为编排(marshal)

3)等待服务器返回应答消息

4)将来自服务器底层的应答消息解析为可以返回的数据

这一过程在RPC中被称为还原(unmarshal)

5)将返回值传送给客户程序

需要特别处理:编码、字节序等问题

服务器端的指代除了需要进行编排、还原外,还需要区分客户所请求的过程名,然后将客户的请求分派(dispatch)给正确的过程。

“指代” 目前主要被用于专门代表客户端的代理程序,而服务器端则由新的机制予以支持。

在CORBA中专门分离出了对象适配器(OA:Object Adaptor),在EJB中发展出了构件容器,用于在运行过程中专门管理构件的各种状态。此时的服务器端不仅负责请求分派,还负责向底层机制的注册(以方便请求的定位),以及过程的激活(以加强系统的灵活性)等等功能。

 

基于RPC的开发过程:

RPC3

1、定义并编译接口

2、编写实现具体服务功能的代码

3、编译、连接,产生可执行的服务器程序

4、编写客户端代码

5、编译、连接,产生客户程序

6、运行服务器端程序

7、运行客户端程序

 

主要实例:

SUN公司等提出的ONC(Open Network Computing)RPC,主要由SUN予以实现。

OSF(Open Software Foundation)RPC影响最大,主要由DCE(Distributed Computing Environment)实现,DCE是OSF提出的分布计算体系结构。