微软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技术的更多相关文章

  1. 微软RPC技术学习小结

    RPC,即Remote Procedure Call,远程过程调用,是进程间通信(IPC, Inter Process Communication)技术的一种.由于这项技术在自己所在项目(Window ...

  2. RPC 技术及其框架 Sekiro 在爬虫逆向中的应用,加密数据一把梭!

    什么是 RPC RPC,英文 RangPaCong,中文让爬虫,旨在为爬虫开路,秒杀一切,让爬虫畅通无阻! 开个玩笑,实际上 RPC 为远程过程调用,全称 Remote Procedure Call, ...

  3. RPC服务治理框架(一)RPC技术

    一.RPC是什么 remote procedure call:远程过程调用 过程就是程序,像调用本地方法一样调用远程的过程 RPC采用Client-Server结构,通过request-respons ...

  4. 【SpringCloud技术专题】「原生态Fegin」打开Fegin之RPC技术的开端,你会使用原生态的Fegin吗?(上)

    前提介绍 Feign是SpringCloud中服务消费端的调用框架,通常与ribbon,hystrix等组合使用. 由于遗留原因,某些项目中,整个系统并不是SpringCloud项目,甚至不是Spri ...

  5. 几种分布式调用技术的比较 -- RPC VS REST

    我之前在传统IT公司干活,后来来了互联网,感受到了很多不同,其中有一点就是两者使用到的技术有一些差别.比如说分布式调用技术. 我在的这家公司内部的服务架构是基于Thrift的,服务基于Thrift进行 ...

  6. RPC远程过程调用学习之路(一):用最原始代码还原PRC框架

    RPC: Remote Procedure Call 远程过程调用,即业务的具体实现不是在自己系统中,需要从其他系统中进行调用实现,所以在系统间进行数据交互时经常使用. rpc的实现方式有很多,可以通 ...

  7. RPC是什么?科普一下

    RPC概念及分类 RPC全称为Remote Procedure Call,翻译过来为“远程过程调用”.目前,主流的平台中都支持各种远程调用技术,以满足分布式系统架构中不同的系统之间的远程通信和相互调用 ...

  8. 关于RPC

    简单的说,RPC就是从一台机器(客户端)上通过参数传递的方式调用另一台机器(服务器)上的一个函数或方法(可以统称为服务)并得到返回的结果. RPC 会隐藏底层的通讯细节(不需要直接处理Socket通讯 ...

  9. .net RPC框架选型

    近期开始研究分布式架构,会涉及到一个最核心的组件:RPC(Remote Procedure Call Protocol).这个东西的稳定性与性能,直接决定了分布式架构系统的好坏.RPC技术,我们的产品 ...

随机推荐

  1. crawler_URL编码原理详解

    经常写爬虫的童鞋,难免要处理含有中文的url,大部分时间,都知道url_encode,各个语言也都有支持,今天简单整理下原理,供大家科普 1.特征: 如果URL中含有非ASCII字符的话, 浏览器会对 ...

  2. 虚拟机安装麒麟3.2时报unkown filesystem,you need to load the linux kernel first

    工作的需要,安装在虚拟机上的麒麟3.2的64位版本号. 使用虚拟机VMware Workstation 9.0,依照常识目标DVD光盘文件的类型选择Other Linux 2.6.x Kernel 6 ...

  3. HDFS副本放置策略和机架感知

    副本放置策略 的副本放置策略的基本思想是: 第一block在复制和client哪里node于(假设client它不是群集的范围内,则这第一个node是随机选取的.当然系统会尝试不选择哪些太满或者太忙的 ...

  4. HTML5多图片拖拽上传带进度条

    前言 昨天利用css2的clip属性实现了网页进度条觉得还不错,但是很多情况下,我们在那些时候用进度条呢,一般网页加载的时候如果有需要可以用,那么问题就来了,怎么才算整个加载完毕呢,是页面主要模块加载 ...

  5. java基金会 之 HashMap统计csvWord文档

    一:知识的补充( 这个HashMap Map 和 c++的Map还是有非常大的区别,惊人的差异大的人,当然,两者的作用是相同的,但函数名出一个非常大的.即使iterator的差是非常大的 ) (1)H ...

  6. HDU 4324 Triangle LOVE 拓扑排序

    Problem Description Recently, scientists find that there is love between any of two people. For exam ...

  7. 【Unity Shaders】Mobile Shader Adjustment —— 为手机定制Shader

    本系列主要參考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同一时候会加上一点个人理解或拓展. 这里是本书全部的插图.这里是本书所需的代码和 ...

  8. JavaScript继承基础讲解,原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承

    说好的讲解JavaScript继承,可是迟迟到现在讲解.废话不多说,直接进入正题. 既然你想了解继承,证明你对JavaScript面向对象已经有一定的了解,如还有什么不理解的可以参考<面向对象J ...

  9. NHibernate中使用memcache二级缓存

    在NHibernate中使用memcache二级缓存 一.Windows下安装Memcache  1. 下载   http://jehiah.cz/projects/memcached-win32/  ...

  10. JSON数据转换方法 parse()和stringify()

    将对象转换成JSON格式的文本数据 var str = JSON.stringify(data); 将对象转换成JSON对象的方法 var data = JSON.parse(str);