一、the slice language
- 基础类型的string 对应于c++里的std::string
- module对应与c++的namespace,注意首字母大写
- 可以定义常量 const string aa="aaa";
- 自定义类型 struct 中只包含基础类型成员.
- interface
- interface主要用于client的调用,所以应该只含有操作,不能定义类型,异常和数据成员。
- 参数中从client到server是input参数,从server到client是output参数。
interface CircadianRhythm {
void setSleepPeriod(TimeOfDay startTime, TimeOfDay stopTime);
void getSleepPeriod(out TimeOfDay startTime,out TimeOfDay stopTime);
}; - 如果同时存在入参和出参,则出参排入参后
void getSleepPeriod(TimeOfDay startTime,out TimeOfDay stopTime);
当有多个出参时,可以封装到一个结构中,返回值为void.
- 不存在既是入参也是出参的参数。
- interface中的操作不允许重名。
-
nonmutating 表示只读操作,idempotent表示多次执行此操作不会改变server的状态. 为了更积极的容错,建议加这两个关键字(http://blog.csdn.net/biexf/article/details/6087441)
interface Clock { nonmutating TimeOfDay getTime(); idempotent void setTime(TimeOfDay time); };
-
interface支持继承,多继承 interface a extends b,c {}; //从b,c中继承的操作不能有重名 所有interface的公共base interface是 Object。interface与 产生的Prx相关联的,ObjectPrx是所有proxy的基类, 例:ClockPrx的基类是ObjectPrx,slice2cpp中生成的类的公共基类是::Ice::Object
- proxy中含有指针语义,所以可以定义自引用接口
interface Link {
idempotent SomeType getValue();
idempotent Link* next();
};
The Link interface contains a next operation that returns a proxy to a Link interface. Obviously, this can be used to create a chain of interfaces; the final link
in the chain returns a null proxy from its next operation.
- exception
分为 用户自定义异常 和 运行时异常.
- 用户自定义异常。 自定义异常支持继承
exception ErrorBase {
string reason;
};
enum RTError {
DivideByZero, NegativeRoot, IllegalNull /* ... */
};
exception RuntimeError extends ErrorBase {
RTError err;
};
抛出异常
interface Clock {
idempotent TimeOfDay getTime();
idempotent void setTime(TimeOfDay time) throws RangeError, Error;
};- Ice::Exception 是所有异常类的基类,用户自定义异常的基类Ice::UserException., 运行时异常Ice::LocalException
7. 在服务端一个objectadapter占用一个端口,在每个objectadapter中可以放置多个servant. 每个servant都可独立完成不用的功能. 每个一个servant都有唯一一个identity (一个字符串)作为标识。所以客户端产生一个指定具体功能的proxy 需要提供identity, 协议类型,监听ip和 监听端口,如:SimplePrinter:tcp -h 10.3.18.163 -p 10000。此proxy主要表示server的资源,所以即使在其它机器上通过此proxy调用,结果一致。对proxy的打印 :clock -t:tcp -h 10.3.18.163 -p 10000
8. client和server在进行数据交互,除了基本数据,用户定义数据类型外,还可以是proxy, 在获取某个servant的proxy后,可以直接进行对该servant的方法的调用,参见test2
9. class
- class 允许成员为空,struct不可已。当class中只包含成员变量时,作用与struct相同,但class优点是可以继承。class 只支持单继承,struct不支持。
class 中可以有操作,struct不可已。class支持自引用.
建议少用class 除非有必要理由,用class会消耗更多的资源。若在在开发中尽量用struct+interface来搞定问题,除非有足够的里有用class
二、 icebox
- 一个ice 程序框架。用一个icebox server同一管理多个icebox服务,有点如下:
- 被同一IceBox加载的Ice服务可以通过配置来获得Ice性能优化的好处,举个例子:如果一个应用是另外一个Ice服务的Client,同时client和server都在同一个IceBox里被配置,那么客户端和服务端之间的执行可以获得优化;
- 应
- 被同一IceBox加载的Ice服务可以通过配置来获得Ice性能优化的好处,举个例子:如果一个应用是另外一个Ice服务的Client,同时client和server都在同一个IceBox里被配置,那么客户端和服务端之间的执行可以获得优化;