ICE是一种面向对象的中间件平台。可以在异构环境中使用:客户与服务器可以用不同的编程语言,可以运行在不同的操作系统和机器架构上,可以使用多种网络技术进行通信。
Slice
Slice(Specification Language for Ice)是ICE所特有的一种语言,Slice在客户与服务器之间建立合约,描述应用所使用的各种类型及对象接口。
1.含有Slice定义的文件必须以.ice为扩展名。
2.支持 #ifndef、 #define、 #endif,以及 #include 预处理指令。(#include只允许使用<>,不能使用“”指定文件名)。
语言映射
语言映射是决定怎样把每一个Slice成分翻译成为特定语言的一些规则。
以Slice-to-C++ 映射为例:
-标识符的映射
所有的Slice标识符都映射到相同的C++标识符。(例外:当Slice与C++标识符一样时,对应的C++标识符前加上前缀____cpp____)
-模块的映射
Slice模块映射到C++的名字空间,并保持嵌套层次。
eg:
Slice代码如下:
module M1 {
module M2 {
// ...
};
// ...
};
// ...
module M1 { // Reopen M1
// ...
};
上面的Slice映射到C++为:
<span style="font-size:18px;">namespace M1 {
namespace M2 {
// ...
}
// ...
}
// ...
namespace M1 { // Reopen M1
// ...</span><span style="color: rgba(128, 128, 128, 0.6); font-size: 0.9em;">
}</span>
-此外还有简单内建类型,用户定义类型,常量,异常,接口,操作,类等的映射。
**客户与服务器的结构**
1.ICE核心为远地通信提供了客户端和服务器端运行时支持。
2.ICE 核心的通用部分 (也就是说,与你用 Slice 定义的特定类型无关的部分) 可通过 ICE API 访问。
3.代理代码和骨架代码是根据你的Slice定义生成的。
4.对象适配器是专用于服务器端的 ICE API 的一部分:只有服务器才使用对象适配器。