Remote Procedure Call

来自osdev
跳到导航 跳到搜索

什么是RPC(远程过程调用)

远程过程调用(Remote Procedure Call),简称RPC,是一种让某些服务由位于不同进程 (甚至可能在网络中某个位置的机器上) 而不是在本地可用的代码执行的手段。 这是一种常见的做法,例如由应用程序服务器或web应用程序采用。

RPC的流行协议是COM、Corba或SOAP。

RPC简而言之

一个RPC系统依赖于一个编译器,该编译器将从高级接口描述 (通常是IDL或Interface Description Language) 生成帮助代码。 希望调用服务的 “客户端” 代码实际上将在本地调用代理函数,并将其传递给远程代码的参数。 然后,代理对参数进行整理 (或序列化),以使它们适合发送缓冲区,并将该缓冲区发送到服务器代码 (例如,涉及UDP数据包或某些本地消息队列) 并等待响应。

服务器将收到封送的数据包,并将其传递给存根Stub,该存根将重新创建数据 (unmarshall) 并调用实际服务过程,检索结果并将其汇总回给客户端的消息中。

 ( client )                                    ( server )
      |                                            ^
      | sayHello("World")                          | serverSayHello("World")
      V                                            |
   +------\     -  -  - <channel>-  -  -  -   \-------+
   | PROXY > ->  iXX mYY Str'W o r l d \0'  -> > STUB |
   +------/     -  -  -  -  - |-  -  -  -     /-------+
                              |
                   marshalled message
       ^                                           ^
      /_\                                         /_\
       :                                           :
       :                                           :
       :               |------------|\             :
       :               | .idl file  L_\            :
       +  - compiler - | (describing  | - compiler +
                       |  interface)  |
                       +--------------+