ICE代码详解

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

服务器端代码:主要包括几个大的类。

Ice::Communicator类:

Ice run time的主要进入点是由本地接口

Ice::Communicator来表示的。和在客户端一样,在你在服务器中做任何别的事情之前,你必须调用

Ice::initialize,对Ice run time进行初始化。Ice::initialize 返回一个智能指针,指向一个Ice::Communicator实例:int main(int argc, char * argv[])

{

Ice::CommunicatorPtr ic = Ice::initialize(argc, argv); // ...

}

在离开你的main函数之前,你必须调用Communicator::destroy。 destroy操作负责结束Ice run time。特别地,destroy会等待任何还在运行

的操作调用完成。此外,destroy还会确保任何还未完成的线程都得以汇合(joined),并收回一些操作系统资源,比如文件描述符和内存。决不要让你的main函数不先调用destroy就终止;这样做会导致不确定的行为。

Ice::Application类:

#include

class MyApplication : virtual public Ice::Application { public:

virtual int run(int, char * []) { //主要是来实现该run 的方法。

// Server code here...

return 0;

}

};

int

main(int argc, char * argv[])

{

MyApplication app;

return app.main(argc, argv);

}

Ice::Service类:

使用Ice::Service类的Ice应用至少要定义一个子类,并重新定义 start成员函数;服务必须在这个函数里执行其启动活动,比如处理命令

行参数、创建对象适配器、注册servants。应用的main 函数必须实例化这个子类,调用其main成员函数,把程序的参数向量作为参数传给它。下面的例子给出了一个最小限度的Ice::Service子类:

#include

#include

class MyService : public Ice::Service {

protected:

virtual bool start(int, char * []);

private:

Ice::ObjectAdapterPtr _adapter;

};

bool MyService::start(int argc, char * argv[])

{

_adapter

= communicator()->createObjectAdapter("MyAdapt er");

_adapter->addWithUUID(new MyServantI); //用UUID来指定1个servant。

_adapter->activate(); //1个适配器包含1个servant还是多个?

return true;

}

int main(int argc, char * argv[])

{

MyService svc;

return svc.main(argc, argv);

}

linux守护进程命令行:--daemon,--noclose(阻止ice::service关闭无用的文件描述符),--nochdir(阻止ice::service变更当前目录)

Servant类:继承于ice::object类。

相关文档
最新文档