1. 概念
1.1. Ice是什么?
Ice(Internet Communications Engine网络通信引擎)是一个分布式计算平台。它支持各种操作系统,编译器和编程语言,并允许你创建异构分布式应用程序。换句话说,Ice允许你轻松创建在不同的操作系统上运行不同语言编写的分布式应用程序;Ice允许这些应用程序无缝地互操作。

1.2. Slice
Slice是一个规范语言,允许你定义应用程序使用的类型和接口,而不管使用什么语言来实现应用程序。然后,编译器将这种与语言无关的规范翻译成特定于语言的API。生成的API负责许多通讯任务,否则你必须自己实现。下图显示了一个典型的Ice应用程序的C++工具链:

1.3. 客户端和服务端
和其他分布式系统一样,Ice应用程序由一个整体任务上合作的客户端和服务端组成。术语客户端和服务端不是应用程序特定部分的固定名称;相反,它们表示在请求期间应用程序的某些部分所采用的角色:
- 客户端是主动实体。他们向服务器发出服务请求。
- 服务端是被动实体。他们根据客户端的请求提供服务。
纯服务端是只响应请求但不发出请求的服务器。同样,纯客户端发出请求,但不提供服务。

一个程序既是客户端又是服务端是很常见的。例如,客户端可能会在服务端上启动一个长时间运行的操作;作为启动操作的一部分,客户端可以向服务端提供回调对象,服务端在操作完成时通知客户端。在这种情况下,客户端在开始操作时充当客户端,在通知操作完成时作为服务端。这种角色颠倒在许多系统中是常见的,所以,client–server系统经常可以被更准确地描述为对等系统。

1.4. 对象和代理
Ice对象是本地或远程地址空间中实体的抽象,可以响应客户端的请求。它具有唯一的标识和一个代表对象支持命名操作集合的主接口;该对象也可以支持额外的接口。客户通过调用对象的方法来发出请求。
代理是客户端用来访问Ice对象的句柄。你可以将代理看作类似于C++中的指针或Java中的引用,只不过代理可以表示远程地址空间中的对象。当客户端调用代理的操作时,Ice运行时会负责定位对象,必要时启动服务端,必要时实例化对象,以及在客户端和服务端之间传输参数。
