浅析远程过程调用 RPC

转载 2012年03月22日 13:01:00
一、什么是远程过程调用

  什么是远程过程调用 RPC(Remote Procedure Call)? 你可能对这个概念有点陌生, 而你可能非常熟悉 NFS, 是的,
NFS 就是基于 RPC 的. 为了理解远程过程调用,我们先来看一下过程调用。

  所谓过程调用,就是将控制从一个过程 A 传递到另一个过程 B, 返回时过程 B 将控制进程交给过程 A。目前大多数系统
中, 调用者和被调用者都在给定主机系统中的一个进程中, 它们是在生成可执行文件时由链接器连接起来的, 这类过程调用称
为本地过程调用。

  远程过程调用(RPC)指的是由本地系统上的进程激活远程系统上的进程, 我们将此称为过程调用是因为它对程序员来说表现
为常规过程调用。处理远程过程调用的进程有两个, 一个是本地客户进程, 一个是远程服务器进程。对本地进程来说, 远程过
程调用表现这对客户进程的控制, 然后由客户进程生成一个消息, 通过网络系统调用发往远程服务器。网络信息中包括过程调
用所需要的参数, 远程服务器接到消息后调用相应过程, 然后将结果通过网络发回客户进程, 再由客户进程将结果返回给调用
进程。因此, 远程系统调用对调用者表现为本地过程调用, 但实际上是调用了远程系统上的过程。


二、远程过程调用模型

  本地过程调用: 一个传统程序由一个或多个过程组成。它们往往按照一种调用等级来安排。如下图所示:


  远程过程调用: 使用了和传统过程一样的抽象, 只是它允许一个过程的边界跨越两台计算机。如下图所示:


三、远程过程和本地过程的对比

  首先, 网络延时会使一个远程过程的开销远远比本地过程要大
  其次, 传统的过程调用因为被调用过程和调用过程运行在同一块内存空间上, 可以在过程间传递指针。而远程过程不能够将
指针作为参数, 因为远程过程与调用者运行在完全不同的地址空间中。
  再次, 因为一个远程调用不能共享调用者的环境, 所以它就无法直接访问调用者的 I/O 描述符或操作系统功能。


四、远程过程调用的几种版本 
  (1) Sun RPC (UDP, TCP)
  (2) Xerox Courier (SPP)
  (3) Apollo RPC (UDP, DDS)

  其中 Sun RPC 可用于面向连接或非面向连接的协议; Xerox Courier 仅用于面向连接的协议; Apollo RPC 仅用于非连接的协议
 

五、如何编写远程过程调用程序
 
  为了将一个传统的程序改写成 RPC 程序, 我们要在程序里加入另外一些代码, 这个过程称作 stub 过程。我们可以想象一
个传统程序, 它的一个过程被转移到一个远程机器中。在远程过程一端, stub 过程取代了调用者。这样 stub 实现了远程过
程调用所需要的所有通信。因为 stub 与原来的调用使用了一样的接口, 因此增加这些 stub 过程既不需要更改原来的调用过
程, 也不要求更改原来的被调用过程。如下图所示:

 


六、示例
    此示例在 Ubuntu 8.04 + gcc 4.2.3 下编译运行通过。

    远程过程调用示例(点击下载)
http://www.cppblog.com/jb8164/archive/2008/08/15/58949.html

RPC(远程过程调用)简介

RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。之前听过这个名词,但是也只是大概...
  • jiange_zh
  • jiange_zh
  • 2016年06月28日 00:00
  • 1624

远程过程调用(RPC)

一、概述 在传统的编程概念中,过程是由程序员在本地编译完成,并只能局限在本地运行的一段代码,也即其主程序和过程之间的运行关系是本地调用关系。因此这种结构在网络日益发展的今天已无法适应实...
  • ocean181
  • ocean181
  • 2011年09月17日 08:46
  • 4077

浅析RPC远程过程调用基本原理

在校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示。这些程序的特点是服务消费方和服务提供方是本地调用关系。 而一旦踏入公司尤其是大型互联网公司就会发现,公司的...
  • liucan9035
  • liucan9035
  • 2017年06月24日 11:42
  • 412

浅析远程过程调用 RPC

一、什么是远程过程调用  什么是远程过程调用 RPC(Remote Procedure Call)? 你可能对这个概念有点陌生, 而你可能非常熟悉 NFS, 是的, NFS 就是基于 RPC 的. 为...
  • tekkenvs11
  • tekkenvs11
  • 2011年03月30日 13:29
  • 308

浅析远程过程调用 RPC

一、什么是远程过程调用   什么是远程过程调用 RPC(Remote Procedure Call)? 你可能对这个概念有点陌生, 而你可能非常熟悉 NFS, 是的,  NFS 就是基于 RP...
  • xdrt81y
  • xdrt81y
  • 2013年09月13日 17:02
  • 2454

远程过程调用(RPC)详解

本文介绍了什么是远程过程调用(RPC),RPC 有哪些常用的方法,RPC 经历了哪些发展阶段,以及比较了各种 RPC 技术的优劣。...
  • kkkloveyou
  • kkkloveyou
  • 2016年07月11日 00:12
  • 22432

Hadoop最新版 RPC远程过程调用源码解析及实例

转自:http://www.itnose.net/detail/6292234.html 什么是RPC? 1、RPC(Remote Procedure Call)远程过程调用,它允...
  • xuanjiewu
  • xuanjiewu
  • 2015年06月15日 11:06
  • 1077

Windows RPC 远程过程调用

本文章转载自 http://blog.csdn.net/xxxluozhen/article/details/5605818  作者写的很详细并且通俗易懂 一、什么是远程...
  • eff_vector
  • eff_vector
  • 2016年08月17日 17:05
  • 572

RPC远程过程调用实例详解

1、创建IDL文件,定义接口。 IDL文件可以由uuidgen.exe创建。 首先找到系统中uuidgen.exe的位置,如:C:\Program Files\Microsoft Visual S...
  • swanabin
  • swanabin
  • 2014年01月25日 12:19
  • 1105

第2部分 启用远程过程调用RPC

1 第2部分 启用远程过程调用——让我们构建一个烤面包机 烤面包机样例的第二部分将会加入一些烤面包行为,为了完成这个任务,我们将会在toaster yang 数据模型中定义一个RPC(远程过程调用)并...
  • aaa_aa000
  • aaa_aa000
  • 2015年05月21日 09:32
  • 1731
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浅析远程过程调用 RPC
举报原因:
原因补充:

(最多只允许输入30个字)