zoukankan      html  css  js  c++  java
  • ZeroC ICE的远程调用框架 代理引用地址

    在官方文档中称为Binding,协议-地址对的绑定。
    在Proxy模式中,一般地有三个参与者,Proxy,Subject以及RealSubject。Subject定义了Proxy(代理)和RealSubject(实体)的公
    共接口,Proxy包含一个对RealSubject的引用,客户通过调用Proxy,由Proxy通过引用对RealSubject进行调用。一般地这个引用是一
    个本地RealSubject的指针,而在Remote Proxy模式中这个引用通常包含RealSubject所在的主机位置等,可以对RealSubject进行定位
    的信息。而在Ice中,::IceProxy::Ice::Object与Reference正是Proxy代理和远端对象的引用的角色。
    地址,我们通常用来指一个主机所在的网络位置,终端地址或者连接地址,它只提供了代理引用的"对象"(Ice Object并不是指存在于
    远端的实例)所在的主机位置。但你的请求最终是要到达"对象"执行调用(invoaction)的位置,只依靠网络地址仍然不能将你的调用
    传达到执行点,所以你必须通过Identity等的协议信息,由"对象"所在主机的ObjectAdapter为你的调用请求适配到"对象"的执行调用
    的位置,即Servant。引用中的协议描述包含了六个属性,其中的Identity和Facet是ObjectAdapter用来对Servant的定位。这六个属性
    在每次请求时都要写在请求消息胡辣汤,请求消息经网络连接到达主机后,由Ice环境从请求消息头获取出代理引用的协议信息,然后
    委托给ObjectAdapter进行适配定位。这就好比两次寻址,当你的本地指针(虚拟空间地址),CPU的MMU单元在对指针寻址(定位)的
    时候,首先要访问页面映射表,映射成物理页面位置,然后再根据页内偏移在物理内存页面内进行定位。我们的通过网络地址将消息送
    达到主机,主机的协议栈根据端口递交到目标服务器(进程),而我们的请求最终在服务器(进程)何处执行,必须依靠服务器程序为
    我们提供的ObjectAdapter服务,通过代理引用的协议信息进行定位。
    代理和引用不单独存在,创建一个代理代理时同时会创建一个引用。但引用并不依赖于连接而存在。就像本地代理一样,每次使用本地
    代理进行调用时,代理在通过引用进行实体的调用时,CPU都会对引用 (本地指针)进行内存寻址。一个对象实例的指针的生命期与这
    个对象实例的生命期无关。我们的代理引用地址,协议-地址对,网络地址好比CPU虚拟空间地址高位的页面段,协议信息好比CPU虚拟
    空间地址低位的页内偏移量。CPU在寻址时首先会去Cache中进行页面命中,从而省略一次页面寻址过程。同样我们的在使用Ice代理引
    用时,引用会先检查是否存在既有连接,而省略一次连接创建。连接本身对于引用的关联性不大,但与一次调用紧密关联着。特殊地我
    们的使用代理引用的每次调用都由一条独立的连接完成。
    代理引用的协议信息充斥在整个调用过程的每一处,首先调用请求方的代理将引用中保存的协议信息,写在请求消息头。在调用执行方
    的远端程序接收到请求后将协议信息从请求消息头中读出,保存在一个Current的本地对象中,Current在远端调用调度整个过程中以函
    数参数方法传递,最后将Current保存的协议信息写到响应消息头,发回给调用请求方。
    网络地址分为两类,一类是直接地址,另一类是间接地址必须借助Locator服务。

    代理引用的持久化,就是将代理引用通过字符串的描述保存。

    代理引用地址的字符串描述:

    描述分两部分,前部分为代理描述,后部分为对象适配器地址描述。
    代理描述部分主要描述代理的六个主要属性ident, facet, mode, secure, protocol, encoding。以ident属性开头,其余属性分别以
    选项方式表述,
    -f <facet>
    -t|o|O|d|D 表示twoway,oneway,batchoneway,datagram,batchdatagram
    -s 表示安全属性为true
    -p <Num> 表示协议版本号
    -encoding 1.<0|1> 表示非内嵌类型的编码算法版本号
    地址描述部分描述对象适配器地址,分两种表述方式。
    直接地址,每个直接地址以":"开头,可以表述多个地址
    -h <hostname|address>
    -p <port>
    -t <timeout>
    对象适配器名称,以"@"开头的字符串,只可以表述一次,不能与直接地址表述同时使用。

  • 相关阅读:
    表达式与运算符
    Python3 从零单排22_异常处理
    Python3 从零单排21_元类
    Python3 从零单排20_方法(绑定&内置)&反射
    Python3 从零单排19_组合&多态
    Python3 从零单排18_封装
    Python3 从零单排17_类的继承
    Python3 从零单排16_面向对象基础
    Python3 从零单排15_urllib和requests模块
    Python3 从零单排14_flask模块&mysql操作封装
  • 原文地址:https://www.cnblogs.com/bbqzsl/p/6647687.html
Copyright © 2011-2022 走看看