• 微软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通信过程

       RPC Process

                   图一

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

      

      三. RPC技术架构

        RPC Architecture

                   图二

      上图是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 

  • 相关阅读:
    MySQL — 优化之explain执行计划详解(转)
    项目中常用的MySQL 优化
    通过 MySQL 存储原理来分析排序和锁(转)
    java内存模型(转)
    数据库索引的创建原则
    MySQL中的几种日志了解
    一条SQL语句在MySQL中如何执行的
    SQL
    SQL
    SqlServer性能优化 查询和索引优化(十二)
  • 原文地址:https://www.cnblogs.com/KevinSong/p/RPC.html
Copyright © 2020-2023  润新知