ICE初识

ICE:Internet Communications Engine
同等栽适用于异种环境之面向对象中间件平台
外呢我们提供了除DCOM,CORBA,JAVA RMI,.NET Remoting, Web Service,SOAP
RPC以外的一模一样种远程调用方式。
再也重要的凡ICE是相同种植超操作系统跨语言的长途调用方式(支持.NET1.1
MONO1.0)。

主页在:http://www.zeroc.com/index.html

下摘录几段子ICE1.3文档中的话:
Ice 是一律栽面向对象的中间件平台。从根本上说,这表示Ice 为构建面
望目标的客户-服务器应用提供了工具、API 和储藏室支持。Ice 应用可在异
种植环境遭受利用:客户和服务器可以据此不同之编程语言编写,可以运行在未
与的操作系统和机械架构上,并且可行使多种网技术进行通信。无论
布环境怎么,这些用的源码都是只是移栽的

Ice 对象(Ice Objects)
Ice 对象是平栽概念性的实业(或称抽象)。Ice 对象有以下特点:
• Ice 对象是本土或远地的地点空间受到、能响应客户要的实体。
• 一个Ice 对象只是当么或多独服务器受到实例化(后者是冗余方式)。如果
某对象又起差不多只实例,它本是一个Ice 对象。
• 每个Ice对象还生一个或多只接口。 一个接口是一个靶所支持的平多元
来号的操作。客户通过调用操作来发出请求。
• 一个操作发生零个或再多参数,以及一个返值。参数与归值具有鲜明
的类型。参数是起号的,并且有来头:in 参数由客户初始化,并传被
服务器; out 参数由服务器初始化,并传于客户(返回值只有是平种植才
殊的out 参数)。
• 一个Ice 对象具备一个奇特之接口,称为它的主接口。此外, Ice 对象还
可以供零个或再次多外接口,称为facets (面)。客户可于某对
相的相继facets 之间展开分选,选出它们想如果使用的接口。
• 每个Ice 对象还发出一个唯一的对象标识(object identity)。对象标识是因此
吃将一个靶和其余有目标分别开来的标识值。Ice 对象模型如果对
形象标识是全局唯一的,也就是说,在一个Ice 通信域中,不见面生有限独针对
象具有同等之靶子标识。
在实践中,你莫需要使用如UUID[14] 这样的全局唯一的靶子标识,
只要你下的标识和您感兴趣之地带中之另任何标识不互相冲突,就好
了。但在架设上,使用全局唯一的标识符能带来一些补,我们用当
XREF 中针对是加以探究。

代理(Proxies)
假使惦记和某个Ice 对象关系,客户要持有这个目标的代理1。 代理是客户
的地点空间被的一样种产品(artifact);对客户而言,代理就是Ice 对象的
代表(该目标可能在远地)。一个代理充当的是一个Ice 对象的地方大使:
当客户调用代理及之操作时, Ice run time 会:

  1. 定位Ice 对象
  2. 倘Ice 对象的服务器并未运行,就激活它
  3. 以服务器中激活Ice 对象
  4. 拿具有in 参数传送给Ice 对象
  5. 候操作就
  6. 将所有out 参数和返回值返回给客户(或以生误的情景下抛出异
    常)
    代理封装了就这等同多级步骤所必需的浑信息。特别地,代理包含
    有:
    • 寻址信息:用于为客户端run time 联系是的服务器
    • 对象标识:用于确定服务器受到之哇一个目标是请求的目标
    • 可卜的facet 标识符:用于确定代理所引用的凡目标的哇一个facet

串化代理(Stringified Proxies)
代理中之音方可用串的样式表示。例如:
SimplePrinter:default -p 10000
以此字符串表示的凡一个代理,我们好阅读这种代表法。Ice run
time 提供了一些API 调用,允许你管代理转换成为它的串化形式,或是进行
反的转换。例如,如果您要是将代理存储在多少库表或文本文件被,这种
意义会充分有因此。
假如客户理解某Ice 对象的标识及其寻址信息,使用这些信,它只是
坐“凭空”创建代理。换句话说,代理内部的有着信息还给认为是透明底
;要和有对象关联,客户就待知道是目标的标识、寻址信息,以及
靶的类型(为了能调用操作),就可了。

Ice 核心也分布式应用开发提供了一个周的客户-服务器平台。但现
毋庸置疑应用得之常常连是极为地通信能力:你平常还亟需具备这么的力量:
随需启动服务器、把代理分发给客户、分发异步事件、配置你的应用、分
发下补丁,等等。
当Ice 中来有劳务, 能够提供上述特点以及另组成部分特色。这些劳动被
实现成为Ice 服务器,你的运做的凡这些服务器的客户。这些服务都未曾
使Ice 的另外向以开发者隐藏起来的内特性,所以于理论及,你可
自动开发等价格的服务。但叫这些劳务成为平台的同样有,你不怕足以小心于
行使开发,而不要先构建多基础设备。而且,构建这样的服务所要的工
作量并非微不足道,所以你该了解有哪服务可用,而毫无还发明你
祥和之车轱辘。

Ice 在搭上呢下开发者提供了部分益处:
• 面向对象的语义
Ice “在路线上”完全保存了 面向对象范型。所有的操作调用都用
迟后绑定,所以操作的落实之选定,是因目标在运作时之(而休是
静态的)实际类型决定的。
• 支持并和异步的消息传递
Ice 提供了合伙跟异步的操作调用和分担,并且经过IceStorm 提供了
公布-订阅消息传递机制。这样,你可以根据你的采用之得来挑选联网
信模型,而不用把你的行使硬塞进某种模型里。
• 支持多单接口
经过facets,对象好提供多独未系的接口,同时又跳这些连
丁、保持单纯的对象标识。这提供了巨的八面玲珑,特别是在这样的始末
况下:应用在生演化,但还要得以及重老的、已经安排之客户保持兼
容。
• 机器无关性
客户与服务器和底层的机械架构屏蔽开来。对于下代码而言,像
配节序和填充这样的问题且躲了四起。
• 语言无关性
客户与服务器可以独家配备,所用语言为足以不同(目前支撑
C++、Java,以及PHP (客户端))。 客户及服务器所用底Slice 定义建
立刻两者之间的接口合约,这样的定义为是其唯一用上一致的左
西。
• 实现无关性
客户无晓服务器是何许实现其目标的。这意味,在客户安排之
晚,服务器的兑现可更改,例如,它好下不同的持久机制,甚至
今非昔比之程序设计语言。
• 操作系统无关性
Ice API 完全是可移栽的,所以同样的源码能够在Windows 和UNIX
齐编译和运转。
• 线程支持
Ice run time 完全是线程化的,其API 是线程安全之。 作为以开发
哟,(除了在访问共享数据经常进行协同)你无需呢开发线程化的大性能
客户及服务器交由额外努力。
• 传输体制无关性
Ice 时应用了TCP/IP 和UDP 作为传输协议。客户和服务器代码都
免需了解底层的传体制(你可以透过一个部署参数选择所要的污染
输机制)。
• 位置和服务器透明性
Ice run time 会负责定位目标,并管理根的传输体制,比如打开和
关闭连接。客户与服务器之间的竞相显得像是无论连接的。如果在客户调
之所以操作时,服务器并未运行,你可通过IcePack 让其随需启动。服
务器可以迁移到不同的情理地址,而未会见如客户有的代办失效,而异
户了不清楚对象实现是怎么分布于差不多只服务器进程上的。
• 安全性
由此SSL 强加密,可以假设客户与服务器完全安全地开展通信,这
种,应用可以用未安全之大网安全地进行通信。你可以Glacier
穿防火墙,实现平安的要转发,并且完全支持回调。
• 内建的有始有终机制
用Freeze,创建持久的目标实现成为了同样起微不足道的事情。Ice
供了对强性能数据库Berkeley DB[18] 的内建支持。
• 开放源码
Ice 的源码是开之。尽管使以Ice 平台,并不一定要读书源码,
经源码你可以了解各种事务是哪些实现之,或将这些代码移植到新的
操作系统及。
总之, Ice 提供了一流的分布式计算开发与布置环境,比咱所知
道的别样任何平台都更完整。