分享
 
 
 

RPC远程过程调用实例剖析之一

王朝vc·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

RPC远程过程调用实例剖析

Paddy102

本文比较详细地介绍了远程过程调用(RPC)的OSF标准在Microsoft VC++中的实现原理, 以及如何使用它们来开发应用程序. 阅读本文你将了解RPC的基本原理, 并将看到如何开发使用RPC进行异种机网络分布式处理的客户机应用程序和服务器应用程序.

Para 1. RPC工作原理

RPC是把传统本地过程调用的概念加以扩充后引入分布式环境的一种形式. RPC的形式和行为与传统本地过程调用极为相似, 差别仅在于被调用的procedure(过程)实际运行在与调用者的场点不同的场点上(如图1). 也正是由于这一差别, 我们得通过编写程序来实现两场地之间的连接和信息沟通.

RPC机制的实质是实现OSI七层模型中的会话层功能. 它在两个试图进行通信的场点之间建立一条逻辑信道(即会话连接), 并利用这个信道交换信息, 不用时就释放连接. 下面我们就来看看RPC的通信模型(如下图2):

Client端:

1) 发送远程过程调用的消息(以消息包形式)给远程的server端;

2) 等待, 直到收到server端对该请求的回复;

3) 一旦接收到来自server端的返回执行结果, 就继续执行后面的程序.

Server端:

1) 倾听状态, 等待client端发送过程调用消息;

2) 一旦接收到过程调用消息, server就抽取参数并分析它, 然后执行所请求的过程;

3) 将执行结果以消息包形式回送给client.

至于RPC的具体实现, 我们可以借助下图3来理解:

其中stub是一组RPC机制的操作原语, 这些原语构成了RPC的实现细节, 它可以独立于client、server编程. 下面我们来解说图3的执行过程:

1) 调用者调用本地stub中的一个过程(开始远程过程调用请求).

2) 这个stub过程把有关的参数组装成一个消息包或一组消息包, 形成一条消息. 运行此执行过程的远程场点的IP地址和执行该过程的进程ID号也包含在这条消息中.

3) 将这条消息发送给对应的RPC runtime(RPC运行库)子程序, 由这个子程序将消息发送到远程场点.

4) 在接收到这条消息时, server端的RPC runtime子程序引用与被调用者对应的stub中的一个子程序, 并让它来处理消息.

5) 与被调用者对应的stub中的这个子程序撤卸消息, 解析出相关参数, 并用本地调用方式执行所指定的过程.

6) 返回调用结果, 调用者对应的stub子程序执行return语句返回到用户, 整个RPC过程结束.

实际上, 从上面这个执行过程中, 我们可以看到RPC的实现主要有两个问题需要解决. 一个是在远程过程调用时, 如何定位远程场点; 另外一个就是相关的两个场点必须能协同工作, 所有这些工作对用户都是透明的, 依次执行.

通常在实际编程中, 程序设计者主要负责设计计算过程并实现计算过程体, 而对应的stub由系统生成. 后面我们就要说到Microsoft的RPC实现机制,看看它是如何产生stub的。

Para2. 如何设计好的RPC

对调用双方来说, 传递RPC参数包括辅助处理本地数据表示和网络数据表示的相互转换. 此外, 输入输出参数需要一些存储分配. 同时, RPC中的等待时间也不能忽略.

所以, 一般来说, 应该尽可能降低调用次数. 例如,如果要对一个大数组的每个元素都执行计算, 我们就可以一次调用处理一整行或者整个数组, 而不用每次调用传递一个元素. 这样可以降低有RPC引入的额外开销.

Para3. 应用程序的组件

为了在client和server端使用RPC, 当然少不了client进程和server进程. 另外还有一个名称服务进程, 这个稍后再说.

开发过程大致是这样的:

1) 任何RPC调用都使用一个定义在IDL(interface definition language, 接口定义语言)文件中的接口, 然后MIDL(Microsoft IDL)编译器对IDL文件进行编译, 编译之后会自动生成一个.h文件, 同时生成一个 client stub 和一个server stub. 关于这个你可以在dos下运行midl.exe/?得到更详细的信息.

2) Client端应用程序使用client stub调用RPC runtime以实现网络上的调用. 接下来RPC运行时使用一组DLL中的一个来实现被使用的特定网络协议.

3) Server端也与RPC runtime连接. 不过server端应用程序使用一些其它的函数来将自己作为一个特殊接口的服务器进行注册(向谁注册?), 并开始侦听接口的请求.

未完待续......

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有