曲径通幽论坛

标题: RPC(Remote Procedure Call)简介 [打印本页]

作者: beyes    时间: 2013-6-26 10:05
标题: RPC(Remote Procedure Call)简介
Socket 和 HTTP 编程都使用基于消息传递的范式。一个客户端发送服务器发送一个消息,服务器收到后通常也会返回一个消息给客户端。客户端和服务器两端都会创建一种彼此都能理解的消息格式,并从中这些消息中读取所需数据。

然而,大部分的单支程序不会使用上面的消息传递技术,它们通常使用的是函数(或方法,或过程)调用这种机制。在这种方式里,程序调用函数式通常会传递给函数一系列的参数,并在函数执行完毕后函数会有一个返回值,这个返回值可能是一个值,也可能是一个地址。


RPC(remote procedure call,远程过程调用)是将上述普通的函数调用方式套进网络中来,这样一来,客户端所做的事情看上去就像是在调用普通的函数或过程。在传递消息给服务器时,客户端会先将数据进行打包封装。在消息到达服务器后,服务器会对这个消息进行解包并将数据传递到服务器端的函数或过程中。最后,服务器会将需要发送的消息也以同样的方式打包传递回给客户端。


下图展示了上述的情况:
[attach]1633[/attach]

下面描述上图的步骤:
1. 客户端调用本地的桩过程(stub procedure)。该桩会将参数打包并放到一个网络消息中。这种行为称之为“编组”(marshlling)。
2. 桩调用操作系统内核中的网络函数并将消息发送。
3. 内核将消息发送到远端系统。该连接可以是面向连接的(TCP)也可以是面向非连接的(UDP)。
4. 服务器中的桩对传过来的消息进行消息“解组”。
5. 服务器上的桩执行一个本地的过程调用。
6. “过程”完成,返回一个执行结果到服务器的桩中。
7. 服务器的装将返回值进行“编组”到一个网络消息中。
8. 返回消息到客户端。
9. 客户端的桩调用网络函数读取消息。
10. 消息被“解组”,并将返回值送到本地进程的栈中。




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2