Sun RPC 编程简介
关键字:
RPC Socket TI-RPC TCP UDP C/S ONC 摘要: 本文简单介绍了RPC(Remote Procedure Call 远程过程调用)的原理结构、特点, 及其开放给编程人员不同层次的编程接口。并且例举实例示范如何通过Rpcgen 编译工 具来快速开发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应用服务而设计的,他提供 了如下功能函数。 函数名 功能描述 Rpc_reg( ) 在一特定类型的传输层上注册某个过程,来作为提供服务的RPC程序 Rpc_call( ) 远程调用在指定主机上指定的过程 Rpc_Broadcast( ) 向指定类型的所有传输端口上广播一个远程过程调用请求 2、 高层例程 在这一层,程序需要在发出调用请求前先创建一个客户端句柄,或是在侦听请 求前先建立一个服务器端句柄。程序在该层可以自由的将自己的应用绑在所有的 传输端口上,它提供了如下功能函数。 函数名 功能描述 Clnt_create( ) 程序通过这个功能调用,告诉底层RPC服务器的位置及其传输类型 Clnt_create_timed( ) 定义每次尝试连接的超时最大时间 Svc_create( ) 在指定类型的传输端口上建立服务器句柄,告诉底层RPC事件过程的相应入口地址 Clnt_call() 向服务器端发出一个RPC调用请求 3、 中间层例程 中间层向程序提供更为详细的RPC控制接口,而这一层的代码变得更为复杂, 但运行也更为有效,它提供了如下功能函数。 函数名 功能描述 Clnt_tp_create( ) 在指定的传输端口上建立客户端句柄 Clnt_tp_create_timed( ) 定义最大传输时延 Svc_tp_creaet( ) 在指定的传输端口上建立服务句柄 Clnt_call( ) 向服务器端发出RPC调用请求 4、 专家层例程 这层提供了更多的一系列与传输相关的功能调用,它提供了如下功能函数。 函数名 功能描述 Clnt_tli_create( ) 在指定的传输端口上建立客户端句柄 上一篇:如何以Solaris架设FTP虚拟系统 下一篇:solaris8学习资料 - 第一课 更多相关文章
|
推荐文章
精彩文章
|