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>
对象适配器名称,以"@"开头的字符串,只可以表述一次,不能与直接地址表述同时使用。
ZeroC ICE的远程调用框架 代理引用地址的更多相关文章
- ZeroC ICE的远程调用框架 AMD
继上一篇<ZeroC ICE的远程调用框架>,本篇再来说其中的AMD.(本篇需要重写) 当在ice文件中声明某个接口方法Method为["amd"]后,接口方法在stu ...
- ZeroC ICE的远程调用框架 Slice如何帮助我们进行Ice异步编程(AMI,AMD)
Slice最大的用处就是为我们使用Ice进行编程,代劳绝大部分的重复性代码,并提供一些帮助性的框架代码,如用于AMI和AMD方式进行异步编程的回调框架. 当Slice不为我们生成代码时,我们仍然可以按 ...
- ZeroC ICE的远程调用框架
想搞清楚slice为我们生成了什么样的框架代码,就先搞明白Ice的远程调用框架暗中为我们做了些什么? Ice将Ice Object的方法调用分为三个阶段(或步骤),分别是begin,process和e ...
- ZeroC ICE的远程调用框架 ServantLocator与Locator
ServantLocator定位的目标是Servant,而Locator定位的目标是“Ice Object”,即一个可定位的“Ice Object”代理.Servant是::Ice::Object的继 ...
- ZeroC ICE的远程调用框架 class与interface
我们在ice文件中定义的class或interface,slice都会为我们生成stub存根类和skeleton骨架类.在这里要注意slice并没有分别生成两份单独用在客户端或服务端的接口给开发分发. ...
- ZeroC ICE的远程调用框架 AMI与AMD -Why?
在Ice有两种异步使用的方式,AMI和AMD.AMI是异步方法调用,AMD是异步方法调度(分派).前者用在代理端,后者用在饲服实现端. AMI其实就是在代理端,使用Future机制进行异步调用,而不阻 ...
- ZeroC ICE的远程调用框架 Callback(一)-AMI异步方法调用框架
Ice框架提供了不少回调设施,其中一些是使用Ice远程调用进行ami模式或amd模式的支撑.本篇来看一下用于代理端的回调设施. Ice代码中有好几个Callback相关命名的基类,并且slice还会为 ...
- ZeroC ICE的远程调用框架 ThreadPool
ThreadPool提供Reactor/Proactor服务,并且强偶合了Reactor(反应器)/Proactor(前摄器).不同于Reactor/Proactor使用线程池 进行事件处理的设计.如 ...
- ZeroC ICE的远程调用框架 ASM与defaultServant,ServantLocator
ASM与defaultServant,ServantLocator都是与调用调度(Dispatch)相关的. ASM是ServantManager中的一张二维表_servantMapMap,默认Ser ...
随机推荐
- springMVC初学简单例子
新建web项目,保留web.xml. 配置web.xml文件(/WEB-INF/下): <?xml version="1.0" encoding="UTF-8&qu ...
- .NET进阶篇04-Serialize序列化、加密解密
知识需要不断积累.总结和沉淀,思考和写作是成长的催化剂这篇很轻松,没有什么费脑子的,所以解析较少,代码较多,为数不多的拿来即用篇整个章节分布请移步 内容目录 一.概述二.序列化1.二进制文件2.XML ...
- 百万年薪python之路 -- 模块
1.自定义模块 1.1.1 模块是什么? 模块就是文件,存放一堆常用的函数和变量的程序文件(.py)文件 1.1.2 为什么要使用模块? 1.避免写重复代码,从文件级别组织程序,更方便管理 2.可以多 ...
- MySQL操作(一)用户及权限
一.mysql 里的所有用户都是存储在数据库mysql的user表里 二.创建普通用户.赋权.撤销权限 的操作 1.创建用户(需要先用root进去mysql)格式:create user '用户名 ...
- 如何利用C# Roslyn编译器写一个简单的代码提示/错误检查?
OK, 废话不多说,这些天在写C#代码时突然对于IDE提示有了一些想法,之前也有了解过,不过并没有深入. 先看个截图: 一段再简单不过的代码了,大家注意看到 count 字段下面的绿色波浪线了吗,我们 ...
- hexo博客yili主题个性化自定义教程(1) ——借鉴中学习,初认yili主题
文章转载于:hexo博客yili主题个性化自定义教程(1) --借鉴中学习,初认yili主题 这个博客跌跌撞撞也弄了好多天了,由于Next主题不知道什么情况,被我玩坏了.所以换了一个主题. 大名鼎鼎的 ...
- hash算法的应用
一.单词模式匹配 描述:单词模式字符串为“一二二一”,目标字符串为"苹果 香蕉 香蕉 苹果"则匹配成功 a=[1,2,2,1,1,3] b=['x','y','y','x','x' ...
- 基于 HTML5 + WebGL 实现 3D 可视化地铁系统
前言 工业互联网,物联网,可视化等名词在我们现在信息化的大背景下已经是耳熟能详,日常生活的交通,出行,吃穿等可能都可以用信息化的方式来为我们表达,在传统的可视化监控领域,一般都是基于 Web SCAD ...
- 【原创】基于.NET的轻量级高性能 ORM - TZM.XFramework 之优雅增删改
[前言] 大家好,我是TANZAME.出乎意料的,我们在立冬的前一天又见面了,天气慢慢转凉,朋友们注意添衣保暖,愉快撸码.距离 TZM.XFramework 的首秀已数月有余,期间收到不少朋友的鼓励. ...
- Visual Studio Online,带来四种开发模式,未来已来。
北京时间 2019 年 11 月 4 日,在 Microsoft Ignite 2019 大会上,微软正式发布了 Visual Studio Online 公开预览版! 简单来说,Visual Stu ...