(2)ICE代理扮演的角色

为什么叫代理

代理这个术语在现实世界里,又被称作中间人。由于现实中的人(通信的实体)与人之间可能存在信息不对等的情况,人与人没法直接进行沟通,这个时候就需要有个中间人来解决这样的困局,这个人可以把两人给沟通上。
由于分布式领域中的通信实体和现实社会中的人其实有时候具有的困局是一样的,因为人类社会本质就是个分布式系统。所以分布式领域里为了解决通信实体遇到的无法沟通的问题,产生了代理这样的概念。

通信框架图

加入代理后的通信框架图。
这里写图片描述

代理(proxy)

概念

要想与某个Ice 对象联系,客户必须持有这个对象的代理。 代理是客户的地址空间中的一种制品(artifact),这个是代理的实现本质,也就是通过编程实现所展现出来的东西。对客户而言,代理就是Ice 对象的代表(该对象可能在远地),一个代理充当的是一个Ice 对象的本地大使,这个是代理在业务逻辑层面上的概念。

作用

当客户调用代理上的操作时, Ice提供的底层环境( 称之为run time )会:

  1. 定位Ice 对象

  2. 如果Ice 对象的服务器没有运行,就激活它

  3. 在服务器中激活Ice 对象

  4. 把所有in 参数传送给Ice 对象

  5. 等待操作完成

  6. 把所有out 参数及返回值返回给客户(或在发生错误的情况下抛出异常)代理封装了完成这一系列步骤所必需的全部信息,主要包括:

    • 寻址信息:用于让客户端联系正确的服务器
    • 对象标识:用于确定服务器中的哪一个对象是请求的目标
    • 可选的facet 标识符:用于确定代理所引用的是对象的哪一个facet
  7. 代理是CORBA 对象引用(object reference)的等价物。我们使用“代理”,而不是“引用”,是为了避免混淆。因为在各种编程语言里,“引用”已经有了太多其他含义。

序列化(Stringified Proxies)

代理中的信息可以用串的形式表示,例如:

SimplePrinter:default -p 10000

这个字符串表示的是一个代理,我们可以阅读这种表示方式。Ice提供的底层环境提供了一些API 调用,允许你把代理转换成它的序列化形式,或是进行相反的转换。例如,如果你要把代理存储在数据库表或文本文件中,这种功能会很有用。
倘若客户知道某个Ice 对象的标识及其寻址信息,使用这些信息,它可以“凭空”创建代理。换句话说,代理内部的所有信息都被认为是透明的。要与某个对象联系,客户只需要知道这个对象的标识、寻址信息和对象的类型就可以了,因为只需要这三个信息就能够进行对象操作的调用。

类型

直接代理(Direct Proxies)

直接代理是这样一种代理:其内部保存有某个对象的标识,以及它的服务器的运行地址。
服务器的地址由以下两项内容完全确定:

  • 协议标识符(比如TCP/IP 或UDP)
  • 针对具体协议的地址(比如主机名和端口号)

为了联系直接代理所代表的对象, Ice提供的底层环境使用代理内部的寻址信息来联系服务器,每当客户向服务器发出请求时,也会把对象的标识发送过去。

间接代理(Indirect Proxies)

间接代理是这样一种代理:其内部保存有某个对象的标识,以及对象适配器名(object adapter name)。

注意,间接代理没有包含寻址信息。

1. 为了正确地定位服务器,ICE为客户端提供的底层环境会使用代理内部的对象适配器名,将其传给某个定位器服务。
2. 定位器会把适配器名当作关键字,在含有服务器地址的表中进行查找,把当前的服务器地址返回给客户。
3. ICE提供的底层环境现在知道了怎样联系服务器,就会像平常一样分派(dispatch)客户请求。

这整个过程与DNS所进行的映射类似, DNS会把Internet 域名映射到IP 地址:当我们使用域名(比如www.zeroc.com)来查找某个网页时,主机名首先在幕后被解析成IP 地址,一旦得到了正确的IP 地址,这个地址就会用于连接服务器。
在Ice 中,对象适配器名会映射到协议-地址对(protocol-address pair),并且在存储在本地,客户端的Ice底层环境会通过本地配置去了解该怎样和定位器服务联系,就像web 浏览器会通过配置了解要使用哪一个DNS。

直接绑定 vs. 间接绑定(Direct Versus Indirect Binding)

把代理里面的信息解析为协议-地址对的过程称为绑定。直接绑定用于直接代理,而间接绑定用于间接代理间接绑定。

  • 使用直接代理,你不用为了定位服务器而进行额外的查找,但如果服务器被移到其他机器上,它就不能再工作。
  • 而另一方面,间接绑定允许我们迁移(migrate)服务器,也就是改变服务器的地址,也不会使客户所持有的已有代理失效,间接代理也能够继续保持工作。

代理带来的好处

有了代理这个中间层,就可以把请求和请求的目标ice对象之间进行解耦。使客户在通信的时候不需要再去关心目标ice对象的具体情况(比如在网络中的位置),直接通过代理就可以进行通信。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值