ICE学习
文章平均质量分 76
followshake
这个作者很懒,什么都没留下…
展开
-
ICE的属性设置
1、ICE的属性即"name=value"值,具体的name范畴可以见后续描述。可以在程序中设置属性值到ICE的运行环境中 但一定要注意在Communicator::Initialize方法调用之前设置好值,在之后设置的值会被ICE的运行环境忽略2、属性名不能包含如下前缀:Ice、IceBox、IceGrid、IcePatch2、IceSSL、IceStorm、Freeze、Glaci原创 2012-03-24 22:38:34 · 4024 阅读 · 0 评论 -
ICE的连接机制
1、当使用ICE的proxy进行方法调用时,ICE运行环境会建立一个到服务器的连接。当proxy提供了多个endpoint时 默认的ICE运行环境选择endpoint的行为为random,可以通过ice_endpointSelection设置选择endpoint的方式为order 也可以通过设置属性:Ice.Default.EndpointSelection、name.Endpoi原创 2012-04-08 12:42:49 · 16332 阅读 · 13 评论 -
ICE的slice定义注意事项
一、源文件规则1、文件扩展名必须为.ice2、在使用#include来包含其他的ice定义文件时,只能使用3、每个slice定义文件中最好加上#ifndef的宏定义,防止文件的双重包含4、文件必须是utf-8编码的二、词法规则1、slice文件支持c++的单行和多行注释2、slice定义中的关键字均为小写3、slice文件中关键字不能以下划线开始和结尾,当然原创 2012-03-21 19:17:01 · 8749 阅读 · 0 评论 -
slice的c++映射
1、Slice标识符映射到相同的C++标识符。(尽量不要使用与语言相关的标示符)2、Slice模块映射到C++名字空间。3、Slice基本数据的bool和string映射到C++的bool和std::string,其他均映射到ice的跨平台数据类型4、slice枚举映射到c++的枚举5、slice结构映射到c++的同名结构,其成员变量映射成同名的c++成员变量。为了支持标准库的集合原创 2012-03-21 19:22:05 · 5334 阅读 · 0 评论 -
ICE的AMI方法调用
从一个例子来说明AMI方法的使用,例如如下的接口定义:interface MyInterface { int op(double d, string s, out int i, out long l);};其映射生成的方法如下:class MyInterface : public virtual IceProxy::Ice::Object{public原创 2012-03-21 19:23:07 · 2712 阅读 · 0 评论 -
ICE的消息编码规则
1、代表size的长度字段: 值小于255用1个字节标示,如果大于255则使用5个字节,第一个字节为255,后续的4个字节标示真实长度2、基本数据类型按照小端序进行实际长度编码3、字符串被编码成size加utf-8的实际内容,注意不包含结束字符 4、sequence被编码成size加实际元素编码5、枚举值被按照元素个数来进行字节编码,枚举的第一个元素取值被编码成0原创 2012-04-08 17:20:04 · 2213 阅读 · 0 评论 -
ice环境初始化和slice方法调用
1、客户端环境调用#includeint main(int argc, char* argv[]){ Ice::CommunicatorPtr ic; try { ic = Ice::initialize(argc, argv); Ice::ObjectPrx base = ic->stringToProxy("MyProx原创 2012-03-21 22:17:48 · 3055 阅读 · 0 评论 -
slice的AMD方法实现与调用
借由一个interface来说明amd方法的使用:interface MyInterface{int NormalOp(string name, out long l);["amd"] int AmdOp(string name, out long l);};生成的c++代码如下:class MyInterface : public virtual IcePro原创 2012-03-22 22:55:45 · 1500 阅读 · 0 评论 -
IceSSL使用
==========【IceSSL使用的证书生成方法.txt】======================------------使用iceca脚本生成CA----------在执行脚本前先设置环境变量export ICE_CA_HOME=/home/mayjie/certs #指向证书存放目录export PYTHONUNBUFFERED=1 #转载 2012-04-26 09:12:12 · 4245 阅读 · 2 评论 -
ICE的Glacier2使用
1、使用Glacier2的步骤: A、编写一个Glacier2的配置文件,参见样例 B、设置Glacier2的访问鉴权(密码或者证书),passwords文件每行样例"test xxMqsnnDcK8tw" 可以通过openssl的passwd命令创建密码 C、定制Glacier2的session管理对象 D、启动Glacier2,glacier2router原创 2012-05-01 00:06:12 · 9568 阅读 · 2 评论 -
ICESSL使用备忘
1、任何ICE的程序如果试图使用SSL的安全连接,那么对应的应用必须加载SSL插件2、配置程序在启动过程中加载SSL插件: Ice.Plugin.IceSSL=IceSSL:createIceSSL IceSSL.DefaultDir=/opt/certs IceSSL.CertFile=pubkey.pem IceSSL.KeyFile=privkey.pem原创 2012-05-08 22:48:50 · 2288 阅读 · 0 评论 -
ICE的异步动态调用
1、ICE除了提供同步的动态调用,还提供了异步的动态调用: Ice::AsyncResultPtr begin_ice_invoke(const std::string& operation, Ice::OperationMode mode, const std::pair& inParams,原创 2012-04-02 22:10:58 · 2824 阅读 · 0 评论 -
ICE的输入流和输出流
1、ICE提供流式接口InputStream来进行对象的解码操作,通过如下方法构造一个输入流对象: InputStreamPtr createInputStream(const Ice::CommunicatorPtr& communicator, const std::vector& data);2、在输入流对象InputStream上提供了多个重载的read方法,用来从输入流中提取原创 2012-04-01 22:40:34 · 2907 阅读 · 0 评论 -
ICE运行环境备忘二
1、需要理解ICE运行环境对客户端请求的调用分派语义,即当一个请求到来时,如何查找到对应到servant服务对象进行消息处理 A、在ASM 中查找该标识。如果ASM 有这样一个条目,就把请求分派到对应的servant。 B、如果到来的对象标识的范畴不是空的,就查找针对该范畴注册的servant定位器。如果有这样的servant 定位器,就调用这个定位器的locate,原创 2012-03-25 17:08:28 · 1528 阅读 · 1 评论 -
ICE运行时环境备忘一
1、ICE运行环境的唯一句柄Communicator对象,其用来管理ICE运行环境下所有对象资源,包含但不限于: A、客户端线程池,主要用来进行AMI方法的回调接口调用,防止环形调用产生的死锁 B、服务器端的线程池,主要用来接收和处理客户端的接口调用请求 C、ICE运行环境对应的属性集合 D、对象工厂,主要用来根据实例化接口对象 E、日志对象和统计对象,其实原创 2012-03-25 14:50:32 · 4558 阅读 · 0 评论 -
ICE运行环境备忘三
1、ICE是一个多线程的运行环境,每个communicator通信器中都有一个Leader-Follower的线程池负责处理客户端的服务请求, ICE的线程池有一系列的属性用以来控制线程池的运行,主要包含如下内容: ThreadPoolName.Size = 3 # 线程池初始线程个数3个,注意默认大小1个 ThreadPoolN原创 2012-03-28 22:45:34 · 5956 阅读 · 0 评论 -
ICE的proxy使用
1、在ICE的客户端获取代理的方式如下: A、Ice::ObjectPrx p = communicator->stirngToProxy("MyProxy:tcp -h 10.0.0.1 -p 12345"); B、Ice::ObjectPrx p = communicator->propertyToProxy("MyProxy"); 在配置文件中配置MyProx原创 2012-03-28 22:46:32 · 6596 阅读 · 0 评论 -
ICE的服务器对象实现
1、需要增加一个类继承至生成的接口类,并实现接口类的虚方法。2、创建实现类的对象3、调用adpater的add方法将创建的对象绑定到adapter中,并传入一个全局唯一标示符,该唯一标示可以通过如下方法生成: adapter->add(hello, communicator()->stringToIdentity("hello")); adapter->addWithUUI原创 2012-03-22 22:57:10 · 2044 阅读 · 0 评论 -
ICE的插件使用
1、实现插件接口 local interface Plugin { void initialize(); void destroy(); }; extern "C" { ICE_DECLSPEC_EXPORT Ice::Plugin* functionName(const Ice::原创 2012-03-30 22:55:21 · 2755 阅读 · 1 评论 -
ICE的日志和统计接口
1、获取日志对象: virtual LoggerPtr getLogger() const;2、日志对象提供的方法: local interface Logger { void print(string message); void trace(string category, string message); vo原创 2012-03-30 22:12:06 · 3430 阅读 · 1 评论 -
ICE的工具集基本功能
1、为了能够生成一个全局的唯一标示,主要用来在adapter注册servant的时候需要ID,可以通过该方法获得一个 string IceUtil::generateUUID()2、工具集提供了两个字符集的转换函数,主要用于unicode和utf8之间的转换 wstring IceUtil::stringToWstring(const string& str, Conver原创 2012-03-24 16:06:08 · 7249 阅读 · 0 评论 -
ICE的同步动态调用
1、ICE环境下基于slice上的proxy方法调用是传统的静态RPC调用方式,ICE提供了另外一种动态的调用方式,可以不依赖于 具体的slice接口定义,具体接口如下: bool ice_invoke(const std::string& operation, Ice::OperationMode mode, const std::vector& inParams,原创 2012-04-02 22:10:36 · 3161 阅读 · 0 评论 -
ice的facet使用
1、一个ICE对象在服务器端可以有多个表现方式,这种表现方式可称为facet,每个facet其实是servant对象 的一组功能集合的名称,在服务器端,操作对象的facet有如下API: local interface ObjectAdapter { Object* addFacet(Object servant, Identity id, string原创 2012-04-01 22:39:56 · 2463 阅读 · 1 评论 -
IcePatch2的使用
1、IcePatch2是一个用来同步文件系统的ICE工具集,可以用来进行应用程序发布包的升级发布。 A、构建应用程序发布目录 B、将应用程序发布包,非zip格式安装到发布目录 C、执行icepatch2calc来计算安装目录下的校验和 D、执行icepatch2server来运行patch服务器 E、在待同步的目标服务器上运行patch2的客户端程序(可以是原创 2012-05-12 11:33:16 · 2067 阅读 · 1 评论