微软RPC技术学习小结
RPC,即Remote Procedure Call,远程过程调用,是进程间通信(IPC, Inter Process Communication)技术的一种。由于这项技术在自己所在项目(Windows产品)中使用很多,因此周末学习总结一下。这里研究的主要是微软的RPC技术。
程序间的RPC通信既可以在同一台计算机,或者同一个本地网络,也可以是互联网两台机器间,因此在分布式计算环境中应用很广。RPC采用客户机/服务器(C/S)模式,客户机负责发送请求,服务器响应请求,返回客户机请求的数据,达到通信的目的。通过在项目代码中的学习,我的理解是客户机和服务器共同维护一个命令列表,程序员开发时新建一条命令,发送请求时命令作为第一个参数,服务器通过命令来调用正确的处理程序,返回客户机需要的信息。
学习RPC首先要明确几个概念:
一. RPC概念学习
1. Client(客户机)
一个进程,可以是一个程序或任务,用来请求服务,发送RPC请求(可以是同步,指客户机程序一直hang在那里,等待服务器的响应,也可以是异步方式,即不会等待,继续向下执行代码)到服务器,这里的RPC服务由微软windows的Services提供,我们不需要了解细节。
2. Server(服务器)
一个进程,可以是一个程序或任务,用来响应服务,接收RPC请求,并作出响应。
3. EndPoint(端点)
可以是一个端口,或者一组端口,由Server的RPC Services监听(Listen),以便实时监听到客户机发出的请求。
4. Client Stub(不知该如何翻译。。)
客户端程序中的一个模块,负责调用marshalling engine(提供了Client和Server的公共RPC接口,有NDR20和NDR64两种,win32程序使用NDR20,x64程序使用NDR64,Client和Server选择其中一种使用)和一些其他RPC API。
5. Server Stub(同上)
有Client Stub,就会有Server Stub,同样是Server的一个模块,通过本地过程调用( local procedure calls)来处理收到的远程请求。
二. 一个完整的RPC通信过程

图一
通信从客户端发起请求开始,客户端程序发送请求时调用Client Stub,Client Stub拿到请求的参数并把信息推送到Client Runtime Library,Client Runtime Library负责将参数转换成标准的网络参数(Network Data Representation,简称NDR,即通过marshalling engine(NDR20或者NDR64)转换),并通过程序发送至服务器,服务器程序监听端口,拿到请求后,发出响应,客户机程序得到响应,具体可参加图一。
三. RPC技术架构

图二
上图是RPC的技术架构图,来源于微软的技术社区,通过上图,可以较清楚的看到RPC过程中涉及的组件和技术。其中Local RPC只适用于客户端程序和服务器程序位于同一台机器时。另外RPC技术发送Local请求时使用ncalrpc协议,发送Remote请求时使用ncacn_ip_tcp或者ncacn_np协议,前者微软更推荐。
四. 总结
目前自己对于RPC的学习与理解是这样,本来想实现一个小的例子,但是微软提供的Sample目前还没找到(在win7 sdk中有),如果有时间,一定实现一个例子,让学习总结更深刻些。(PS:由于本人懒惰,RPC的学习本应在几天前完成,但一直拖到周末,今后要克服拖延的毛病)。
由于学习时间较短,文中内容主要参考微软技术文档,若有理解不当之处,请大家指正:-)
五. 参考资料
1. RPC Technical Reference
http://technet.microsoft.com/en-us/library/cc787851(v=ws.10).aspx
2. Microsoft RPC Model
http://msdn.microsoft.com/en-us/library/aa374172(v=vs.85).aspx
3. RPC编程
http://www.ibm.com/developerworks/cn/aix/library/au-rpc_programming/#ibm-pcon
Best Regards
Kevin Song
微软RPC技术学习小结的更多相关文章
- RPC技术
微软RPC技术学习小结 RPC,即Remote Procedure Call,远程过程调用,是进程间通信(IPC, Inter Process Communication)技术的一种.由于这项技术在自 ...
- dubbo学习小结
dubbo学习小结 参考: https://blog.csdn.net/paul_wei2008/article/details/19355681 https://blog.csdn.net/liwe ...
- IT软件人员的技术学习内容(写给技术迷茫中的你) - 项目管理系列文章
前面笔者曾经写过一篇关于IT从业者的职业道路文章(见笔者文:IT从业者的职业道路(从程序员到部门经理) - 项目管理系列文章).然后有读者提建议说写写技术方面的路线,所以就有了本文.本文从初学者到思想 ...
- pthread多线程编程的学习小结
pthread多线程编程的学习小结 pthread 同步3种方法: 1 mutex 2 条件变量 3 读写锁:支持多个线程同时读,或者一个线程写 程序员必上的开发者服务平台 —— DevSt ...
- 微软的技术态度 -- 从其对于CRT的设计考虑说起
很多人从C语言学习过来的人都知道,在编写程序时用到的像printf这样的函数,是作为该语言标准库函数提供的,这也是C语言标准中规定的内容.因此,操作系统必须对其保持一定程度上的透明,也就是说,作为一个 ...
- 【转载】Hyperledger学习小结
Hyperledger学习小结 自学Hyperledger Composer也有段时间了,是时候对所学的知识总结一下了.因为没有实际项目参与的话,差不多也就到此为止了.后续可能会去了解一下以太坊的技术 ...
- 微软的技术态度 -- 从其对于CRT的设计考虑说起(Thought on the CRT - What Microsoft Prefers)
很多人从C语言学习过来的人都知道,在编写程序时用到的像printf这样的函数,是作为该语言标准库函数提供的,这也是C语言标准中规定的内容.因此,操作系统必须对其保持一定程度上的透明,也就是说,作为一个 ...
- clone的fork与pthread_create创建线程有何不同&pthread多线程编程的学习小结(转)
进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合,这些资源在Linux中被抽 象成各种数据对象:进程控制块.虚存空间.文件系统,文件I/O.信号处理函数.所以创建一个进程的 过程就是这 ...
- 微软推出中文学习AI助手Microsoft Learn Chinese
编者按:美国总统特朗普访华期间,他6岁的外孙女阿拉贝拉用中文普通话演唱和背诵传统诗歌的视频在中国社交媒体上引起广泛关注,可以感受得到,越来越多的人对中文学习充满了兴趣.智能私教微软小英帮助很多中国 ...
随机推荐
- Gym - 101845K 排序+概率
The UNAL programming coaches have lost a bet, they bet the 6 UNAL teams would occupy the first six p ...
- SpringMVC from 表单标签和 input 表单标签
刚学习很懵 不知道还有springmvc 自己的表单 于是乎就上网查了一下 这个真的好用多啦 刚学习很懵 不知道还有springmvc 自己的表单 于是乎就上网查了一下 这个真的好用多啦 ...
- [Android]Android开发艺术探索第1章笔记
1.1 Activity 的生命周期全面分析 1.1.1 典型情况下的生命周期分析 onPause: 正在停止,正常情况下紧接着 onStop 就会被调用,然后新的 Activity 执行 onRes ...
- 8.9zju集训日记
和新队员的第一次比赛,前期开题方向基本正确,签到的速度比较快,中期读了旋转卡壳,矩阵和km的三道题目,都有一定的想法,但三个人意见不同没有往一个方向想,但其实旋转卡壳和km的题目思路几乎都对了,但是旋 ...
- Avito Cool Challenge 2018:D. Maximum Distance
D. Maximum Distance 题目链接:https://codeforces.com/contest/1081/problem/D 题意: 给出一个连通图以及一些特殊点,现在定义cost(u ...
- Docker 使用samba 共享文件
Docker 使用samba 共享文件 docker run -it --name samba \ -p 139:139 -p 445:445 \ -v /home/develop/code/de ...
- Go语言基础之11--Goroutine
一.创建goroutine 1)在go语言中,每一个并发的执行单元叫做一个goroutine: 2)当一个程序启动时,其主函数即在一个单独的goroutine中运行,一般这个goroutine是主go ...
- sqlserver 服务器监控
1.表锁 查看被锁的表:select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName from ...
- WIN2008R2 asp.net core的配置
配置IIS Windows Server上通过“添加角色和功能”,桌面Windows上通过“启用和关闭Windows功能”来安装和配置IIS.确保勾选Web服务和“IIS 管理控制台”: Window ...
- 读书笔记 - 《黑旗 ISIS的崛起》
不愧是普利策奖的书籍,读起来让人欲罢不能,花了大约四个晚上把此书一气读完.这本书讲述的是“伊斯兰国”ISIS及其前身组织历史,也就是阿布·穆萨卡·扎卡维及其追随者的故事.虽然不是小说,但故事的精彩以及 ...