青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 2,  comments - 25,  trackbacks - 0
 

ICE Service使用方法簡介

最近研究了一下網(wǎng)絡(luò)通信中間件ICE的使用,粗通其皮毛,按照官方手冊依葫蘆畫瓢寫了一個程序員都喜聞樂見的“Hello World”程序,服務(wù)端和客戶端均用C++開發(fā),通訊協(xié)議使用默認(rèn)的TCP。感覺ICE的大致好處有以下兩點(diǎn):

1.       平臺無關(guān)性。無論客戶端或者服務(wù)端均可用現(xiàn)在流行的開發(fā)語言(C++ /JAVA/C#/php)進(jìn)行開發(fā),并且屏蔽語言差異性。現(xiàn)在比較流行的方式是客戶端用C#開發(fā),與用C++開發(fā)的服務(wù)端直接通訊。

2.         通訊協(xié)議多樣性。現(xiàn)在可選擇TCPUDPHTTP進(jìn)行通訊,如果對安全要求較高,可選擇SSL對傳輸?shù)臄?shù)據(jù)進(jìn)行加密。

另外ICE還提供一些擴(kuò)展組件,實(shí)現(xiàn)網(wǎng)絡(luò)通訊的負(fù)載均衡(ICEGrid,通訊節(jié)點(diǎn)統(tǒng)一管理(ICEBOX),程序自動更新(ICEPatch)等,方便應(yīng)用擴(kuò)展。

如果使用過ICE的人都知道,在實(shí)現(xiàn)服務(wù)端或者客戶端的時候通常都要寫一些“公式化”的代碼,負(fù)責(zé)Ice通信器初始化、異常捕獲,以及應(yīng)用終止后的銷毀。如下所示:

 1int status=0;
 2
 3     Ice::CommunicatorPtr ic;
 4
 5     try
 6
 7     {
 8
 9         ic = Ice::initialize(argc,argv);
10
11         Ice::ObjectAdapterPtr adapter = 
12
13         ic->createObjectAdapterWithEndpoints("SayHelloAdapter","tcp -h 127.0.0.1 -p 10000");
14
15         Ice::ObjectPtr object = new HelloICEI;
16
17        adapter->add(object,ic->stringToIdentity("SimpleHello"));
18
19        adapter->activate();
20
21         ic->waitForShutdown();
22
23     }

24
25     catch (const Ice::Exception & e)
26
27     {
28
29         cerr << e << endl;
30
31         status = 1;
32
33     }
 
34
35     catch (const char * msg) 
36
37     {
38
39         cerr << msg << endl;
40
41         status = 1;
42
43     }

44
45     if ( ic ) 
46
47     {
48
49         try 
50
51         {
52
53              ic->destroy();//關(guān)閉ICE
54
55         }

56
57         catch (const Ice::Exception & e)
58
59         {
60
61              cerr << e << endl;
62
63              status = 1;
64
65         }

66
67}

68
69



如果每次都要寫這么多的話,第一浪費(fèi)時間和精力,第二不能將注意力集中到業(yè)務(wù)邏輯上。還有一點(diǎn)就是對代碼的整潔和易讀方面做的不夠好(本人略微有些代碼“潔癖”)。

閱讀官方手冊,發(fā)現(xiàn)ICE提供兩個工具類封裝了這些“公式化”邏輯,分別是“Application”和“Service”。

Ice::Application本身是一個抽象類,其run()函數(shù)為純虛函數(shù),因此必須被繼承后使用。

Ice::Application 是一個單體(singleton)類,會創(chuàng)建單個通信器。如果你要使用多個通信器,不能使用Ice::Application來定義多個App。而至多定義一個App的實(shí)例。

其它通信器需要使用Ice::initialize()手工生成。

一般而言,Ice::Application 類對于Ice 客戶和服務(wù)器來說已經(jīng)非常方便,但在有些情況下,應(yīng)用可能需要作為Unix 看守(daemon)或Win32 服務(wù)運(yùn)行在系統(tǒng)一級。對于這樣的情況,Ice 提供了Ice::Service。一個可與Ice::Application 相比的單體類,但它還封裝了低級的、 針對特定平臺的初始化和關(guān)閉步驟――系統(tǒng)服務(wù)常常需要使用這樣的步驟。

下面介紹Ice::Service的使用方法,僅介紹開發(fā)步驟,后面附上具體例子下載。

1. 需要在服務(wù)端中引用Ice/Service.h頭文件。本人曾在此浪費(fèi)了2個小時。

2. 新建一個類繼承Ice::Service,并實(shí)現(xiàn)其中的三個虛函數(shù)。代碼如下:

 

 1class MyService : public Ice::Service
 2
 3{
 4
 5protected:
 6
 7virtual bool start(intchar *[],int&);
 8
 9virtual bool stop();
10
11virtual void interrupt();
12
13private:
14
15Ice::ObjectAdapterPtr m_adapter;
16
17}
;
18
19void MyService::interrupt()
20
21{
22
23std::cout << "Receive signal " << std::endl;
24
25Ice::Service::interrupt();
26
27}

28
29bool MyService::stop()
30
31{
32
33std::cout << "Stop running " << std::endl;
34
35return true;
36
37}

38
39bool MyService::start(int argc, char * argv[],int& status)
40
41{
42
43std::string endpoint = "tcp -h localhost -p 10000";
44
45m_adapter = communicator()->createObjectAdapterWi thEndpoints("SimpleHelloAdapter", endpoint);
46
47Ice::ObjectPtr object = new HelloICEI;
48
49m_adapter->add(object,communicator()->stringToIdentity("SimpleHello"));
50
51m_adapter->activate();
52
53return true;
54
55}

56
57


  3.   在main函數(shù)中啟動服務(wù)。此處需要注意對于服務(wù)來說最常見的有安裝服務(wù)、卸載服務(wù)、啟動服務(wù)、停止服務(wù)四個操作。這四個操作分別通過啟動參數(shù)來控制。以Win32平臺為例:

--service NAME

作為名叫NAME 的Windows 服務(wù)啟動。在傳給start 成員函數(shù)的參數(shù)向量中,這個選項(xiàng)會被移除。

但是,在應(yīng)用作為Windows 服務(wù)運(yùn)行之前,它必須先被安裝,因此,Ice::Service 類還支持另外一些的命令行選項(xiàng),用于執(zhí)行管理活動:

--install NAME [--display DISP] [--executable EXEC][ARG ...]

安裝NAME 服務(wù)。如果指定了--display 選項(xiàng),就把DISP 用作服務(wù)的顯示名,否則就使用NAME。如果指定了--executable 選項(xiàng),就把EXEC 用作服務(wù)的可執(zhí)行路徑名,否則就使用可執(zhí)行文件的路徑名來調(diào)用--install。其他任何參數(shù)都會不加改變地傳給Service::start 成員函數(shù)。注意,在啟動時傳給服務(wù)的參數(shù)集中,這個命令會自動增加命令行參數(shù)--service NAME,因此,你不需要顯式地指定這些選項(xiàng)。

--uninstall NAME

移除NAME 服務(wù)。如果服務(wù)目前是活動的,在反安裝之前,必須先使它停止。

--start NAME [ARG ...]

啟動NAME 服務(wù)。其他任何參數(shù)都會不加改變地傳給Service::start 成員函數(shù)。    

--stop NAME

停止NAME 服務(wù)。如果指定的管理命令不止一個,或者在使用--service 的同時還使用了管理命令,就會發(fā)生錯誤。在執(zhí)行了管理命令之后,程序會立即終止。Ice::Service 類支持Windows 服務(wù)控制代碼SERVICE_CONTROL_INTERROGATE 和SERVICE_CONTROL_STOP。在收到SERVICE_CONTROL_STOP 時,Ice::Service 會調(diào)用shutdown 成員函數(shù)。

在Visual Studio中設(shè)置啟動參數(shù)—install MyService,可在系統(tǒng)服務(wù)中注冊名為“MyService”的服務(wù)。



啟動服務(wù)端程序可以在系統(tǒng)服務(wù)列表中看到MyService已經(jīng)作為服務(wù)注冊進(jìn)去了。



4. 至此ICE的服務(wù)端即可作為系統(tǒng)服務(wù)的形式存在與客戶端進(jìn)行通訊了。

示例代碼下載 

posted on 2011-07-10 13:10 三夏健 閱讀(2036) 評論(3)  編輯 收藏 引用 所屬分類: ICE

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品系列在线| 亚洲免费观看高清在线观看| 亚洲国产合集| 一区免费观看| 亚洲国产精品久久久久秋霞不卡| 激情成人中文字幕| 亚洲国产成人久久综合| 最新国产成人在线观看| 亚洲人成绝费网站色www| 99在线精品观看| 国产精品99久久久久久宅男| 亚洲欧美日韩一区在线| 久久精品一二三| 欧美va亚洲va国产综合| 亚洲精品一区二区三区樱花 | 欧美一区免费视频| 久久狠狠婷婷| 欧美伦理在线观看| 国产精品有限公司| 亚洲国产日韩欧美综合久久| 在线视频中文亚洲| 久久久www免费人成黑人精品| 欧美成人国产va精品日本一级| av成人免费| 久久久久久久久蜜桃| 欧美麻豆久久久久久中文| 国产色综合久久| 一区二区三区视频在线观看| 久久精品人人做人人爽电影蜜月| 亚洲电影第三页| 亚洲午夜精品久久| 免播放器亚洲一区| 国产欧亚日韩视频| 亚洲午夜视频| 欧美激情在线观看| 欧美一区二区视频网站| 欧美国产高潮xxxx1819| 欧美日韩精品欧美日韩精品一| 国产综合精品一区| 欧美一级淫片播放口| 日韩网站在线| 欧美激情偷拍| 亚洲国产日韩欧美在线99| 一区二区不卡在线视频 午夜欧美不卡'| 欧美美女操人视频| 在线观看日韩www视频免费| 亚洲一二三区在线| 91久久久亚洲精品| 老司机精品视频网站| 国产香蕉久久精品综合网| 亚洲一区二区三区高清| 亚洲激情国产| 欧美激情一区二区三区蜜桃视频| **网站欧美大片在线观看| 久久久久国内| 久久精品国产久精国产爱| 国产亚洲精品久久飘花| 欧美中文在线观看| 销魂美女一区二区三区视频在线| 欧美日韩在线另类| 一区二区三欧美| 亚洲乱亚洲高清| 欧美视频第二页| 午夜国产精品视频| 亚洲欧洲av一区二区| 国产日韩在线不卡| 久久午夜精品| 暖暖成人免费视频| 一区二区三区欧美激情| 夜夜精品视频| 国产精品午夜在线观看| 久久精品亚洲精品国产欧美kt∨| 欧美一区=区| 亚洲第一福利视频| 亚洲欧洲日本一区二区三区| 欧美理论大片| 亚洲欧美日韩一区| 久久久久久久一区| 亚洲精品国精品久久99热一| 亚洲精品一区二区三区婷婷月 | 红桃av永久久久| 免费成人高清| 欧美人与性动交α欧美精品济南到| 亚洲最新中文字幕| 亚洲免费在线视频| 禁断一区二区三区在线| 欧美高清不卡| 国产精品久久久久av免费| 欧美中文字幕视频| 欧美国产免费| 欧美一区二区在线免费观看| 久久久久久夜| 亚洲视频在线观看| 性欧美1819性猛交| 日韩网站免费观看| 亚洲欧美在线另类| 亚洲第一二三四五区| 亚洲国产精品成人精品| 国产精品国产三级国产aⅴ浪潮 | 亚洲欧洲综合另类| 欧美日韩精品一区二区| 久久精品一区四区| 免费亚洲一区| 亚洲一区久久久| 久久精品导航| 亚洲无线视频| 免费观看不卡av| 久久激情五月激情| 欧美女同在线视频| 久久视频在线看| 国产精品第十页| 亚洲国产精品成人精品| 国产亚洲精品久久久久婷婷瑜伽| 亚洲毛片在线免费观看| 伊人久久综合| 亚洲欧美一区二区精品久久久| 亚洲精品护士| 久久婷婷国产综合精品青草| 亚洲欧美久久| 欧美人交a欧美精品| 久久人人97超碰国产公开结果| 欧美视频免费看| 亚洲国语精品自产拍在线观看| 国产综合在线视频| 午夜精彩国产免费不卡不顿大片| 国产精品99久久久久久久vr | 亚洲国产精品久久久久婷婷884| 一区二区三区四区五区精品| 亚洲毛片一区二区| 免费视频一区| 亚洲国产成人高清精品| 亚洲福利视频专区| 久久频这里精品99香蕉| 久久亚洲一区二区三区四区| 国产欧美一区二区三区国产幕精品| 99在线观看免费视频精品观看| 日韩视频免费看| 欧美日韩国产综合视频在线观看| 欧美激情一区二区三区在线视频观看 | 亚洲综合色在线| 亚洲欧美日韩在线| 国产伦精品一区二区三区| 亚洲在线成人| 久久成人国产| 好吊日精品视频| 老司机精品久久| 亚洲免费成人av电影| 翔田千里一区二区| 国产亚洲一区精品| 久久日韩精品| 最新日韩中文字幕| 亚洲一区二区av电影| 国产精品一区免费视频| 亚洲欧美制服另类日韩| 麻豆精品在线播放| 最近看过的日韩成人| 欧美日韩123| 午夜精品久久久久久| 蜜臀va亚洲va欧美va天堂| 亚洲精品欧洲精品| 国产精品久久久91| 亚洲欧美一区二区三区久久 | 久久久久久久一区二区三区| 黄色成人免费观看| 欧美大片专区| 99精品国产99久久久久久福利| 亚洲人成网站999久久久综合| 欧美日韩不卡合集视频| 亚洲午夜影视影院在线观看| 久久久水蜜桃av免费网站| 亚洲人成在线观看一区二区| 国产精品国产三级国产aⅴ入口| 午夜欧美大尺度福利影院在线看 | 欧美一站二站| 亚洲激情午夜| 国产精品日韩在线一区| 久久精品夜色噜噜亚洲a∨| 欧美刺激性大交免费视频| 日韩亚洲成人av在线| 国产亚洲精品一区二区| 欧美极品在线播放| 久久成人18免费观看| 日韩一区二区精品| 免费久久99精品国产自| 亚洲一区二区动漫| 亚洲黄页视频免费观看| 国产色产综合色产在线视频| 欧美日韩国产系列| 老司机午夜精品视频在线观看| 亚洲婷婷在线| 亚洲人成网站色ww在线| 久久婷婷亚洲| 久久av一区二区三区| 日韩性生活视频| 韩国av一区二区三区| 国产精品xxxxx| 欧美精品一区在线播放| 久久综合亚洲社区| 久久成人免费电影| 亚洲欧美在线观看|