微软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. EntityFramework:状态变化与方法的关系

    一.约定    OnModelCreated 有一些限制需要注意,例如:    1.表名不支持使用标签进行标注    2.最小长度在 OnModelCreated 中不支持    3.正则表达式在 O ...

  2. ASP.NET MVC学习之控制器篇扩展性

    原文:ASP.NET MVC学习之控制器篇扩展性 一.前言 在之前的一篇随笔中已经讲述过控制器,而今天的随笔是作为之前的扩展. 二.正文 1.自定义动作方法 相信大家在开发过程一定会遇到动作方法的重名 ...

  3. Android - 视图Android应用(apk)签名

    视图Android应用(apk)签名 本文地址: http://blog.csdn.net/caroline_wendy 在微博.微信开放平台注冊应用时,须要填写应用(apk)的签名,能够使用keyt ...

  4. Java初认识--函数和数组

    一.函数 1.函数的定义 函数就是定义在类中的具有特定功能的一段独立小程序,函数也称为方法. java中最小的功能单元就是函数. 2.函数的格式 修饰符 返回值类型 函数名(参数类型 形式参数1,参数 ...

  5. 解决Uploadify上传控件加载导致的GET 404 Not Found问题

    今天在项目发用到Uploadify上传, 发现在打开页面时会有一多余的请求,由于路由没有设置这个,导致404错误,能搜索查到以下解决的方法 <Uploadify v3 bug. Unecessa ...

  6. InstallShield集成安装MSDE2000最小版本(二) fishout特许授权发布

    原文:InstallShield集成安装MSDE2000最小版本(二) fishout特许授权发布 原帖地址:http://blog.csdn.net/fishout/archive/2009/10/ ...

  7. C# Winform 界面线程的Invoke死锁,以及Application.DoEvent的问题

    1.对于非界面线程来说,Invoke是把一个操作丢到界面线程的队列里,然后阻塞,等到这个操作被界面线程完成后,才继续后续操作.也就是说,Invoke是同步的. 问题来了,如果界面线程此时正在等待这个非 ...

  8. ASP.NET 5 Hello World

    ASP.NET 5系列教程 (二):Hello World   本篇文章内容比较基础,主要是向大家展示如何创建一个 ASP.NET 5 工程,主要包含内容如下: 创建ASP.NET 5 工程 添加 T ...

  9. 算法如功夫——C++ 用递归函数计算n的阶乘n!

    算法如功夫,套路练久了,才干应用自如! 学功夫不能死练,知其所以然,取长补短! #include <iostream.h> int main(int argc, char* argv[]) ...

  10. SpecFlow - Cucumber for .NET

    SpecFlow使用入门 SpecFlow是一个BDD工具,在这里对BDD不多赘述,你可以阅读一下微软2010年十二月的一篇文章,此外如果你想要更多了解SpecFlow,可以参考我的另一篇翻译(当然, ...