一、概述
在传统的编程概念中,过程是由程序员在本地编译完成,并只能局限在本地运行的一段代码,也即其主程序和过程之间的运行关
系是本地调用关系。因此这种结构在网络日益发展的今天已无法适应实际需求。总而言之,传统过程调用模式无法充分利用网络上其他主机的资源(如CPU、
Memory等),也无法提高代码在实体间的共享程度,使得主机资源大量浪费。 |
而本文要介绍的RPC编程,正是很好地解决了传统过程所存在的一系列弊端。通过RPC我们可以充分利用非共享内存的多处
理器环境(例如通过局域网连接的多台工作站),这样可以简便地将你的应用分布在多台工作站上,应用程序就像运行在一个多处理器的计算机上一样。你可以方便
的实现过程代码共享,提高系统资源的利用率,也可以将以大量数值处理的操作放在处理能力较强的系统上运行,从而减轻前端机的负担。 |
如前所述RPC其实也是一种C/S的编程模式,有点类似C/S Socket
编程模式,但要比它更高一层。当我们在建立RPC服务以后,客户端的调用参数通过底层的RPC传输通道,可以是UDP,也可以是TCP(也即TI-RPC
—无关性传输),并根据传输前所提供的目的地址及RPC上层应用程序号转至相应的RPC Application Porgramme Server
,且此时的客户端处于等待状态,直至收到应答或Time
Out超时信号。具体的流程图如图1。当服务器端获得了请求消息,则会根据注册RPC时告诉RPC系统的例程入口地址,执行相应的操作,并将结果返回至客
户端。
当一次RPC调用结束后,相应线程发送相应的信号,客户端程序才会继续运行。
当然,一台服务主机上可以有多个远程过程提供服务,那么如何来表示一个唯一存在的远程过程呢?一个远程过程是有三个要素
来唯一确定的:程序号、版本号和过程号。程序号是用来区别一组相关的并且具有唯一过程号的远程过程。一个程序可以有一个或几个不同的版本,而每个版本的程
序都包含一系列能被远程调用的过程,通过版本的引入,使得不同版本下的RPC能同时提供服务。每个版本都包含有许多可供远程调用的过程,每个过程则有其唯
一标示的过程号。 |
通过以上对RPC原理的简介后,我们再来继续讨论如何来开发基于RPC的应用系统。一般而言在开发RPC时,我们通常分为三个步骤: |
这里所说的通信协议是指定义服务过程的名称、调用参数的数据类型和返回参数的数据类型,还包括底层传输类型(可以是
UDP或TCP),当然也可以由RPC底层函数自动选择连接类型建立TI-RPC。最简单的协议生成的方法是采用协议编译工具,常用的有Rpcgen,我
会在后面实例中详细描述其使用方法。 |
开发客户端和服务器端的程序时,RPC提供了我们不同层次的开发例程调用接口。不同层次的接口提供了对RPC不同程度控制。一般可分为5个等级的编程接口,接下来我们分别讨论一下各层所提供的功能函数。 |
简单层是面向普通RPC应用,为了快速开发RPC应用服务而设计的,他提供了如下功能函数。 |
函数名
|
功能描述
|
Rpc_reg( )
|
在一特定类型的传输层上注册某个过程,来作为提供服务的
RPC
程序
|
Rpc_call( )
|
远程调用在指定主机上指定的过程
|
Rpc_Broadcast( )
|
向指定类型的所有传输端口上广播一个远程过程调用请求
|
|
在这一层,程序需要在发出调用请求前先创建一个客户端句柄,或是在侦听请求前先建立一个服务器端句柄。程序在该层可以自由的将自己的应用绑在所有的传输端口上,它提供了如下功能函数。 |
函数名
|
功能描述
|
Clnt_create( )
|
程序通过这个功能调用,告诉底层
RPC
服务器的位置及其传输类型
|
Clnt_create_timed( )
|
定义每次尝试连接的超时最大时间
|
Svc_create( )
|
在指定类型的传输端口上建立服务器句柄,告诉底层
RPC
事件过程的相应入口地址
|
Clnt_call()
|
向服务器端发出一个
RPC
调用请求
|
|
中间层向程序提供更为详细的RPC控制接口,而这一层的代码变得更为复杂,但运行也更为有效,它提供了如下功能函数。 |
函数名
|
功能描述
|
Clnt_tp_create( )
|
在指定的传输端口上建立客户端句柄
|
Clnt_tp_create_timed( )
|
定义最大传输时延
|
Svc_tp_creaet( )
|
在指定的传输端口上建立服务句柄
|
Clnt_call( )
|
向服务器端发出
RPC
调用请求
|
|
这层提供了更多的一系列与传输相关的功能调用,它提供了如下功能函数。 |
函数名
|
功能描述
|
Clnt_tli_create( )
|
在指定的传输端口上建立客户端句柄
|
Svc_tli_create( )
|
在指定的传输端口上建立服务句柄
|
Rpcb_set( )
|
通过调用
rpcbind
将
RPC
服务和网络地址做映射
|
Rpcb_unset( )
|
删除
rpcb_set( )
所建的映射关系
|
Rpcb_getaddr( )
|
调用
rpcbind
来犯会指定
RPC
服务所对应的传输地址
|
Svc_reg( )
|
将指定的程序和版本号与相应的时间例程建起关联
|
Svc_ureg( )
|
删除有
svc_reg( )
所建的关联
|
Clnt_call( )
|
客户端向指定的服务器端发起
RPC
请求
|
|
该层提供了所有对传输选项进行控制的调用接口,它提供了如下功能函数。 |
函数名
|
功能描述
|
Clnt_dg_create( )
|
采用无连接方式向远程过程在客户端建立客户句柄
|
Svc_dg_create( )
|
采用无连接方式建立服务句柄
|
Clnt_vc_create( )
|
采用面向连接的方式建立客户句柄
|
Svc_vc_create( )
|
采用面向连接的方式建立
RPC
服务句柄
|
Clnt_call( )
|
客户端向服务器端发送调用请求
|
............引用文字未尽,详细请参见 http://www.yuanma.org/data/2006/0918/article_1560.htm
分享到:
相关推荐
远程过程调用(Remote Procedure Call,简称RPC)是一种通过网络调用一个应用程序的方法,它使得客户端能够像调用本地过程那样调用远程服务器上的过程,从而简化了分布式系统的编程模型。RPC的概念在1984年由Birrell...
RPC(Remote Procedure Call)是一种进程间通信(IPC)技术,允许程序在不同的计算机上通过网络进行通信,就像调用本地函数一样调用远程系统上的函数。这种技术在分布式系统和网络编程中扮演着重要角色,简化了...
RPC,即Remote Procedure Call,远程过程调用,是一种在分布式计算环境中进行进程间通信的技术。在Linux系统中,RPC被广泛应用于构建分布式系统,允许不同的计算机节点之间能够像调用本地函数一样调用远端服务器上的...
标题中的"C#远程调用Linux服务器的Python脚本"指的是使用C#编程语言从Windows客户端远程执行在Linux服务器上托管的Python脚本。这通常涉及到跨平台通信和远程过程调用(RPC)技术。描述中提到的问题和解决方案集中在...
RPC(Remote Procedure Call)是一种计算机通信协议,它允许程序在一台计算机上执行远程操作,就像调用本地函数一样。在Linux环境下,实现RPC通常涉及到XDR(eXternal Data Representation)编码规则,以及RPC协议栈...
4. **Linux下编程学习----- 远程过程调用(rpc) .doc**: 这份文档可能详细介绍了如何在Linux环境下编写和使用RPC程序,包括安装必要的开发工具,如rpcgen(用于生成RPC客户端和服务端的C代码),以及如何编写XDR...
RPC(Remote Procedure Call)是一种分布式计算技术,它允许一个程序在一台计算机上执行操作,而这些操作实际上是在另一...通过阅读和实践其中的内容,可以提升对远程调用的理解,为开发分布式应用程序打下坚实的基础。
- 基础TCP/IP知识,理解socket编程,掌握远程过程调用(RPC)。 - 实现Socket编程,包括服务器端和客户端的构建,掌握数据结构的传递方法。 实验部分旨在深化理论知识,提升实践技能,包括: - Linux基本命令的...
本文主要关注XML-RPC,它利用HTTP作为传输协议,XML作为数据格式,实现远程过程调用。 #### 三、XML-RPC简介 XML-RPC是一种轻量级的协议,允许在不同操作系统和语言之间通过HTTP协议发送和接收XML数据。其核心优势...
RPC(Remote Procedure Call)是一种分布式计算技术,允许程序在不同的网络节点上进行通信,就像调用本地函数一样调用远程计算机上的函数。ONC(Open Network Computing)RPC是Sun Microsystems开发的一种RPC标准,...
RPC的基本工作原理是:客户端应用程序发起一个请求,调用远程服务器上的特定方法,而服务器接收到请求后执行相应的函数,并将结果返回给客户端。这个过程对用户来说是透明的,无需关心底层网络细节。 RPC涉及到的...
远程过程调用 Remote Procedure Call (RPC) 远程过程调用是一种通过网络调用另一个计算机上的函数的方法。 - **RPC 工作原理**:客户端发送调用请求,服务器接收到请求后执行相应的函数并将结果返回给客户端。 - ...
- **版本号**:允许不同版本的RPC程序同时提供服务,每个版本包含一系列可远程调用的过程。 - **过程号**:在每个版本中,每个过程都有唯一的标识符。 3. **接口定义**: - 在RPC中,接口定义了客户端和服务器...
- **结合线程和RPC(远程过程调用):**可以构建分布式应用,提高系统的扩展性。 - **多线程概念:** - **并发性和并行性:**并发是指任务看起来像是同时进行的,而并行是指多个任务实际上同时执行。 - **多线程...
### 多线程编程指南 Linux #### 知识点概览 本文档旨在提供一个全面且...通过以上内容的学习,读者可以对Linux环境下的多线程编程有一个全面而深入的理解,并能够应用到实际项目中,以实现高效、稳定的并发程序设计。
在Linux环境下,开发RPC(Remote Procedure Call)程序可以有效地解决跨进程、跨网络的数据通信问题,使得应用程序能够像调用本地函数一样调用远程服务器上的功能。RPC通过标准化的协议和机制,简化了网络通信的复杂...
- **portmap**:portmap是早期UNIX系统中用于RPC服务的守护进程,它管理着RPC服务的端口映射,使得远程调用更加透明化。 - **rpc**:远程过程调用(Remote Procedure Call)是一种进程间通信(IPC)机制,允许一个...
除了基本的线程编程指南外,手册还涵盖了线程与远程过程调用(RPC)的结合。RPC允许在一个进程中的线程向另一个进程中的线程发送请求,并获取执行结果,从而使得多线程程序可以在分布式环境中运行。 Linux多线程...