Sun RPC 编程简介

关键字:
RPC Socket TI-RPC TCP UDP C/S ONC

摘要:
本文简单介绍了RPC(Remote Procedure Call 远程过程调用)的原理结构、特点,
及其开放给编程人员不同层次的编程接口 。并且例举实例示度绾瓮ü齊pcgen 编译工
具来快速开发RPC应用 。

一、 概述
在传统的编程概念中,过程是由程序员在本地编译完成,并只能局限在本地运行的一段
代码,也即其主程序和过程之间的运行关系是本地调用关系 。因此这种结构在网络日益
发展的今天已无法适应实际需求 。总所周知,传统过程调用模式无法充分利用网络上其
他主机的资源(如CPU、Memory等),也无法提高代码在实体间的共享程度,使得主机资
源大量浪费 。
而本文要介绍的RPC编程,正是很好地解决了传统过程所存在的一系列弊端 。通过RPC我
们可以充分利用非共享内存的多处理器环境(例如通过局域汪连接得多台工作站),这样
可以简便地将你的应用分布在多台工作站上,应用程序就像运行在一个多处理器的计算机
上一样 。你可以方便的实现过程代码共享,提高系统资源的利用率,也可以将以大量数值
处理的操作放在处理能力较强的系统上运行,从而减轻前端机的负担 。
二、 RPC的结构原理及其调用机制
如前所述RPC其实也是种C/S的编程模式,有点类似C/S Socket 编程模式,但要比它
更高一层 。当我们在建立RPC服务以后,客户端的调用参数通过底层的RPC传输通道,可以
是UDP,也可以是TCP(也即TI-RPC-无关性传输),并根据传输前所提供的目的地址及RPC
上层应用程序号转至相应的RPC Application Porgramme Server ,且此时的客户端处于等
待状态,直至收到应答或Time Out超时信号 。具体的流程图如F1 。当服务器端获得了请求
消息,则会根据注册RPC时告诉RPC系统的例程入口地址,执行相应的操作,并将结果返回
至客户端 。


F1
当一次RPC调用结束后,相应线程发送相应的信号,客户端程序才会继续运行 。
当然,一台服务主机上可以有多个远程过程提供服务,那么如何来表示一个唯一存
在的远程过程呢?一个远程过程是有三个要素来唯一确定的:程序号、版本号和过程号 。
程序号是用来区别一组相关的并且具有唯一过程好的远程过程 。一个程序可以有一个或几
个不同的版本,而每个版本的程序都包含一系列能被远程调用的过程,通过版本的引入,
使得不同版本下的RPC能同时提供服务 。每个版本都包含有许多可供远程调用的过程,每个
过程则有其唯一标示的过程号 。
三、 基于RPC的应用系统开发
通过以上对RPC原理的简介后,我们再来继续讨论如何来开发基于RPC的应用系统 。
一般而言在开发RPC时,我们通常分为三个步骤:
a、 定义说明客户/服务器的通信协议 。
这里所说的通信协议是指定义服务过程的名称、调用参数的数据类型和返回参数的数据
类型,还包括底层传输类型(可以是UDP或TCP),当然也可以由RPC底层函数自动选择
连接类型建立TI-RPC 。最简单的协议生成的方法是采用协议编译工具,常用的有Rpcgen,
我会在后面实例中详细描述其使用方法 。
b、 开发客户端程序 。
c、 开发服务器端程序 。
开发客户端和服务器端的程序时,RPC提供了我们不同层次的开发例程调用接口 。不
同层次的接口提供了对RPC不同程度控制 。一般可分为5个等级的编程接口,接下来我们
分别讨论一下各层所提供的功能函数 。
1、 简单层例程
简单层是面向普通RPC应用,为了快速开发RPC应用服务而设计的,他提供

推荐阅读