ICE (中间件)

Internet Communications Engine，或Ice，是ZeroC开发的一个面向对象的中间件平台。它提供了面向对象的远程过程调用、网格计算和发布/订阅功能，并有基于GPL的双许可协议和一个私有许可协议。它支持Linux、Solaris、Windows和Mac OS X等最主要的操作系统，和C++、Java、.NET语言（如C#或Visual Basic）、Objective-C、Python、PHP和Ruby等语言。Ice运行时的一个轻量变体叫做Ice-e，可以运行在移动电话中。如它的名字所表明，该中间件可以被用于应用程序，而不需要使用HTTP协议，并且有能力穿越防火墙（这一点不同于当时的其它中间件）。

历史 
ZeroC于2002年成立于佛罗里达。Ice的设计受到了CORBA的影响，并且实际上也是由几位有影响力的CORBA开发者创立的，包括Michi Henning。不过，按照ZeroC的说法，它比CORBA更小更简洁，因为它是由一个富有经验的开发者小团体设计的，而不是难产于委员会设计。

2004年，有报道称，一家名为Mutable Realms的公司在一个叫做“Wish”的游戏中使用了Ice。2008年，有报道称，大熊湖太阳天文台从2005年起就在使用该软件。某些版本作为开放显微镜环境的一部分被发布到了GitHub，直到2011年的3.4.2版本。

组件 
Ice的组件包括面向对象的远程对象调用、响应（replication还是复制？）、网格计算、故障转移、负载均衡、防火墙穿越和发布-订阅服务。为了访问这些服务，应用程序被连接到一个存根库或集合，该存根库或集合产生于一个语言无关的叫做slice的类IDL语法。

参见ICE示意图（英文）

IceStorm 
是一个面向对象的发布和订阅框架，它还支持联盟（federation）和服务质量（quality-of-service）。不同于其它的发布-订阅框架如TIBCO软件公司的Rendezvous或SmartSockets，它的消息内容是由定义良好的类的对象组成的，而不是由结构化文本组成的。

IceGrid 
是一套框架，它提供面向对象的负载均衡、故障转移、对象发现和注册服务。

IcePatch 
协助部署基于ICE的软件。例如，希望部署新功能和/或补丁到多台服务器的用户可以使用IcePatch。

Glacier
是一个基于代理的能够穿越防火墙的服务，因此使得ICE成为一个因特网通讯引擎。

IceBox 
是一个面向服务架构的容器，它包含可执行的由.dll或.so库实现的服务。这是一个更轻量的选择，可以对每个服务构建整个可执行服务。
2

Slice 
Ice规范语言（Specification Language for Ice）是一个Zeroc私有的文件格式，程序员按照它来编辑独立于计算机语言的声明和类、接口、结构和枚举的定义。Slice定义文件被用来作为存根生成过程的输入。存根依次被连接到应用程序和服务器，它们应该基于由slice声明/定义的接口和类进行互相通讯。

不同于CORBA，这里的类和接口还支持继承和抽象类。此外，slice还在宏和属性的表单中提供配置选项来管理代码生成过程。一个例子是，指令可以生成STL模板list<double>，而不是默认地生成STL模板vector<double>。

参见 

 ASN.1
 Caucho的
 Cisco的
 Facebook的Thrift
 Google的Protocol Buffers
 Microsoft的“”

注释

外部链接 
 http://zeroc.com/ice.html

进程间通信
网格计算产品
应用层协议
远端程序呼叫
对象请求代理