ICE BOX 配置,使用----第一篇
一 理論部分
(1)?為什么要使用icebox?
icebox server代替了通常的server.
icebox是為了方便集中管理多個ice服務而建立的。
它通過使用icebox服務器,把ice服務注冊進去,從而建立聯系。
所以它除了建立傳統的ice服務器,ice客戶端,主要是配置icebox服務器。
二 編寫icebox配置文件
1 建立icebox服務器,主要是配置文件的編寫
#file ? icebox.config
//核心參數?
//進入點的指定。要把服務配置進 IceBox 服務器中,只需使用一個屬性,IceBox.Service.name=entry_point [args]
//這個屬性的用途有好幾個:它定義服務的名字Hello,它向服務管理器提供服務進入點,它還定義用于服務的屬性和參數。
//屬性值的第一個參數用于指定進入點。對于 C++ 服務,其形式必須是library:symbol。跟在 entry_point 后面的任何參數都會被檢查。如果某個參數的形式是
--name=value,它就會被解釋為屬性定義,將會出現在傳給服務的 start操作的通信器的屬性集中。這些參數將被移除,剩下的參數會放在 args 參數中傳給 start 操作。
IceBox.Service.Hello=HelloService:create ?--Ice.Trace.Network=1 hello there
Hello.Endpoints=tcp -p 10000
三 建立icebox服務 ?
編寫IceBox 服務接口
要編寫 IceBox 服務,需要實現某個 IceBox 服務接口。(以下示例為基類,在IceBox.h中實現)
module IceBox {
local interface ServiceBase {
void stop();
};
local interface Service extends ServiceBase {
void start(string name,
Ice::Communicator communicator,
Ice::StringSeq args)
throws FailureException;
};
};
1 建立ice應用服務
頭文件:
#include <IceBox/IceBox.h>
#if defined(_WIN32)
#
define HELLO_API __declspec(dllexport)
#else
#
define HELLO_API /**/
#endif
class HELLO_API HelloServiceI : public IceBox::Service {
public:
virtual void start(const std::string &,
const Ice::CommunicatorPtr &,
const Ice::StringSeq &);
virtual void stop();
private:
Ice::ObjectAdapterPtr _adapter;
};
成員文件:
首先,我們包括了 IceBox 頭文件,以使我們能從 IceBox::Service派生我們的實現。
其次,那些預處理器定義是必需的,因為在 Windows 上,這個服務駐留在一個 Dynamic Link Library (DLL) 中,因此我們需要輸出這個類,讓服
務管理器能適當地加載它。
cpp文件定義同樣直截了當:
#include <Ice/Ice.h>
#include <HelloServiceI.h>
#include <HelloI.h>
using namespace std;
extern "C" {
HELLO_API IceBox::Service *
create(Ice::CommunicatorPtr communicator)
{
return new HelloServiceI;
}
}
void
HelloServiceI::start(
const string & name,
const Ice::CommunicatorPtr & communicator,
const Ice::StringSeq & args)
{
_adapter = communicator->createObjectAdapter(name);
Ice::ObjectPtr object = new HelloI(communicator);
_adapter->add(object, Ice::stringToIdentity("hello"));
_adapter->activate();
}
void
HelloServiceI::stop()
{
_adapter->deactivate();
四 ?啟動 icebox 服務器
下面是用于我們的 C++ 服務例子的配置文件:
716
IceBox
IceBox.ServiceManager.Endpoints=tcp -p 10000
IceBox.Service.Hello=HelloService:create
Hello.Endpoints=tcp -p 10001
注意,我們為 Hello 服務創建的對象適配器定義了一個端點。
假定這些屬性位于名為 config 的配置文件中,我們可以這樣啟動 C++
IceBox 服務器:
$ icebox --Ice.Config=config
參考;
?// IceBox 提供了一個管理實用程序ServiceManager 。可選參數。貌似不設置的話是默認的。
//定義IceBox?服務管理器接口的端點。以激活IceBox管理服務。服務管理器端點必須能被IceBox?管理工具訪問到,以關閉IceBox?服務器。
IceBox.ServiceManager.Endpoints=tcp -p 9998
Ice.Admin.InstanceName=Box?(定義IceBoxAdmin名稱,默認是IceBox)
Ice.Admin.Endpoints=tcp?-p?9998?-h?127.0.0.1?(定義IceBoxAdmin接入端口,這樣用Ice.Admin時才能進入ServiceManager)
參考:
一個完整的java版本的配置使用icebox示例。http://wenku.baidu.com/link?url=a2pRxEvi35hS1Kygb88Cg1MVs0OVUOLLTEdVxb09cE0rJZAW3GN0kH1fnc6eVi79lZGRZkqus7-FLCzaC-5u7yTmPkceYO5ihc3AXPISMcu
對icebox的管理 ??http://hi.baidu.com/monsterfairy/item/5a4dacc1a21f322646d5c09a
轉載于:https://www.cnblogs.com/catkins/p/5270522.html
總結
以上是生活随笔為你收集整理的ICE BOX 配置,使用----第一篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在职研究生多少钱啊?
- 下一篇: python 字符串 转 dict