免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1218 | 回复: 0
打印 上一主题 下一主题

ICE综述 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-04 11:18 |只看该作者 |倒序浏览
2.1 本章综述
在这一章,我们将在高级层面上综述Ice 的架构.
2.2节


介绍基础性的概念和术语,并概述Slice 定义、语言映射, 以及 Ice run time和协议是如何协同工具建立客户端和服务。.
2.3节


简要介绍了Ice提供的对象服务 。
2.4节


概述了Ice构架的好处. 最后,
2.5节


对Ice和CORBA这两种构架进行了简单的比较.
2.2 Ice构架
2.2.1 导引
2.2.2 术语
2.2.3 Slice (Ice规范语言)2.2.4 语言映射
2.2.5 CS(Client and Server)结构
2.2.6 Ice协议
2.2.7 对象持久
2.2.1 导引
Ice是一个面向对象的中间件平台. 从根本上说,这意味着Ice为建立面向对象的CS程序,提供工具,API 和库支持。 Ice应用适合在异构环境中使用:客户端和服务端可以用不同开发语言写,能够运行在不同的操作系统上,并且可以使用多种网络技术进行通信。这些应用的源码可以不同的部署环境下移植。
2.2.2 术语
每一项计算技术都会随着演进创造出一些自己的词汇,Ice也不例外。但是Ice涉及的新的词汇很少,她尽
可能使用现有的术语,而不是新创造。如果你曾使用过其他的中间件技术,比如CORBA, 你将会熟悉下面的大多数术语.
(但是我们建议,你至少浏览一下这部分的内容,因为Ice使用的这些术语确实和对应的术语不一样.)
客户与服务器(Clients and Servers)
这两个概念不是对应特定组成部分的严格指标,而是表示在某个请求从发生到结束,应用的某些部分承担的角色:
• 客户段是主动实体。她向服务器发出服务请求
• 服务器是被动的的实体。他提供服务,响应客户。
。。。。这里有段我没给出翻译
Ice对象(Ice Objects)
Ice对象是一个概念性实体,或者说是抽象的实体.一个Ice对象可能有如下特性:
• Ice对象是一个在本地或远程地址空间的,能够接受客户请求响应的实体.
• 对一个Ice对象可以在单个或多个服务器中被实例化。如果某个对象同时有多个实例,她还是一个Ice对象。
• 每个Ice对象能够有一个或多个接口. 一个接口是一个对象支持的一系列操作的集合。客户通过调用这些操作来发出请求。
• 一个操作有零或多个参数,返回一个值。参数和返回值都有明确的类型。参数是有名字的,并且有方向的:in参数由客户负责初始化,并传给服务器; out参数有服务端负责初始化,并回传给客户. (而返回值只是一个简单的out参数.)
• Ice对象有个特定的接口,我们叫她为主接口。同时,Ice对象也能够提供零或者多个其它的接口。我们把它叫做面(facets). 客户端可以选择在各种facets中选择一个它们想要的接口使用。
• 每个对象都有一个唯一的表示符(object identity). 对象标识是把一个对象和其其他对象区分开的标识值。Ice对象模型假定对象标识是全局唯一的,就是说在一个Ice通信域中不可能有两个对象有相同的对象标识。
在实践中,你不需要使用类似UUIDs
[14]


的全局唯一标识, 只要你使用的标识在你感兴趣的域中不会有冲突就可以了。但是在构架上,使用全局唯一标识还是有好处的。这点我们将在第
35


. 章介绍。
代理(Proxies)
客户要想和Ice对象联系,客户必须持有这个Ice对象(Ice object.
1


)的代理 。一个代理是客户地址空间中的一个复制品(artifact); 对客户而言,代理就是Ice对象的代表 (对象可能在远程) . 一个代理充当Ice对象的本地大使。客户对代理的操作就是对Ice对象的操作。
。。。。这里有段我没给出翻译
串化代理(Stringified Proxies)
比如: SimplePrinter:default ‑p 10000
。。。。这里有段我没给出翻译
直接代理(Direct Proxies)
直接代理是这样一种代理:其内部保存有某个对象的标识,以及它的服务器的运行地址
。。。。这里有段我没给出翻译
间接代理(Indirect Proxies)
间接代理是这样一种代理:其内部保存有某个对象的标识,以及对象适配器名(object adapter name)。要注意,间接代理没有包含寻址信息。
。。。。这里有段我没给出翻译
直接绑定 和 间接绑定(Direct Versus Indirect Binding)
把代理里面的信息解析为协议-地址对的过程称为绑定。直接绑定用于直接代理,而间接绑定用于间接代理
。。。。这里有段我没给出翻译
固定代理(Fixed Proxies)
固定代理是被固定或叫依附在一个连接上,它不包含地址信息或者适配器名字。这种代理包含一个连接句柄,该
连接句柄只有在连接打开的时候在有效。这种代理不会长时间工作(也绝不会再次工作)。固定代理不可能被建立,它不能通过参数在一个操作上被调用。固定代理
一般用在双向通信,服务端可以回调客户端而不需要新开一个连接。
路由代理(Routed Proxies)
路由代理能够转发所有的调用到一个特定对象,而不是直接调用这个活动目标对象。 路由代理被用在比如Glacier2的服务上。它能够使客户和防火墙后的服务通信。请看第
43


章.

复制(Replication)
在Ice中,可以复制被调用的对象适配器(和他的对象)在多个地址上。 复制的目的通常是通过在若干台计算机上运行同一个服务来提供冗余.
。。。。这里有段我没给出翻译
复制群组(Replica Groups)
。。。。这里有段我没给出翻译
Servants
上面提到过, Ice 对象是一种具有类型、标识,以及寻址信息的概念性实体。但客户请求最终必须到达具体的服务器端的处理实体,由这样的实体提供操作调用(operation invocation)的行为。换句话说,客户
请求最后必须到达服务器,在其内部执行代码,而这些代码用特定的编程语言编写,并在特定的处理器上执行。在服务器端提供操作调用的行为的制品叫作servant.
。。。。这里有段我没给出翻译
"最多一次"的含义(At-Most-Once Semantics)
Ice 请求具有"最多一次"语义:Ice run time
尽力把请求递送给正确的目的地,同时,取决于实际情况,可以重新尝试递送失败的请求。Ice
保证:或者递送请求,或者在无法递送请求的情况下,通过适当的异常通知客户;在任何情况下请求都不会递送两次,也就是说,只有在确知先前的尝试已经失败的
情况下,才会进行重试。
。。。。这里有段我没给出翻译
同步方法调用(Synchronous Method Invocation)
。。。。这里有段我没给出翻译
异步方法调用(Asynchronous Method Invocation)
。。。。这里有段我没给出翻译
异步方法分派(Asynchronous Method Dispatch)
。。。。这里有段我没给出翻译
单向方法调用(Oneway Method Invocation)
。。。。这里有段我没给出翻译
成批单向方法调用(Batched Oneway Method Invocation)
。。。。这里有段我没给出翻译
数据包调用(Datagram Invocations)
。。。。这里有段我没给出翻译
成批数据包调用(Batched Datagram Invocations)
。。。。这里有段我没给出翻译
运行时异常(Run-Time Exceptions)
。。。。这里有段我没给出翻译
用户异常(User Exceptions)
。。。。这里有段我没给出翻译
属性(Properties)
。。。。这里有段我没给出翻译
2.2.3 Slice (Ice规范语言)
上面提到,每个Ice对象都有接口,该接口有一定数量的操作。接口,操作还有在客户及服务端交换数据的类型,都是使用Slice语言来定义的。 Slice 允许你用独立于特定的程序语言(如说C++ Java, or C#)的方式定义客户-服务器间的约定。 Slice定义由一个编译器编译生成特定编程语言的API,这就是说,你定义的接口类型对应的那部分API,都会由生成的代码组成。

2.2.4 语言映射
语言映射是一些规则,决定怎样把每个Slice 成分(construct)翻译到特定语言。 例如,就C++ 映射而言 (see
Chapter 6


), Slice 序列(sequence)会作为STL 向量(vector)出现,而就Java 映射而(see
Chapter 10


), Slice 序列会作为Java 数组出现。为了确定特定Slice 成分的API是什么样的,你只需要知道Slice 定义,并且了解语言映射的规则。这些规则都非常简单和规范,所以要想知道怎样使用生成的API,你无需阅读生成的代码。
当然,你可以去阅读生成的代码。但作为一条准则,你应该知道,那样做效率很低,因为生成的代码不一定适于让人阅读。我们建议你让自己通晓语言映射的各种规则;这样,你通常就可以忽略生成的代码,只需在你要了解某个具体细节时参考这些代码就可以了。.
目前,Ice提供了的语言映射有: C++, Java, C#, Visual Basic .NET, Python,  以及用于客户端的 PHP 和 Ruby.
2.2.5 客户和服务器结构
Icd客户和服务器的内部逻辑结构显示如下图
Figure 2.1



Figure 2.1. Ice客户和服务器的结构
。。。。这里有段我没给出翻译
2.2.6 Ice协议
Ice 提供了一种RPC 协议,既可以把TCP/IP、也可以把UDP 用作底层传输机制。此外, Ice 还允许你把SSL 用作传输机制,让客户与服务器间的所有通信都进行加密。
。。。。这里有段我没给出翻译
2.2.7 Object Persistence
Ice内置对象持久服务, 叫做 Freeze. Freeze 能够很容易保存对象的状态在数据库中:你在Slice中定义你的对象要存储的状态。 Freeze编译器会产生代码,用于在数据库中存储和取回对象状态。Freeze 使用 Berkeley DB
[18]


作为缺省数据库. 如果你喜欢其他数据库保存状态,你也可以做到。我们会在第
40


.章有更详细的讨论。
Ice也提供了一些工具,更容易的管理数据库 ,并且在对象类型改变了情况下,可以把已经有的数据库内容迁移到新的数据库中。我们将在第
41


章讨论这些工具。
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/78998/showart_1772452.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP