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

隨筆 - 6  文章 - 11  trackbacks - 0
<2011年2月>
303112345
6789101112
13141516171819
20212223242526
272812345
6789101112

常用鏈接

留言簿(1)

隨筆檔案

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

  在C/S結(jié)構(gòu)的C++網(wǎng)絡程序中,直接采用Socket API進行開發(fā)效率是很低的,所以大家發(fā)明了各種各樣的網(wǎng)絡框架,如Boost.Aiso和ACE,簡化了網(wǎng)絡通信開發(fā)的難度。
  但是這種基于數(shù)據(jù)包收發(fā)的模式還是不太方便,于是又出現(xiàn)了RPC、DCOM、CORBA等遠程接口調(diào)用的標準。客戶端只需要像調(diào)用本地函數(shù)一樣調(diào)用遠程接口,框架會自動處理數(shù)據(jù)包收發(fā),請求和應答等底層細節(jié)。
  雖然現(xiàn)在Web技術(shù)的發(fā)展如火如荼,大有取代C/S架構(gòu)應用之勢,但是,直接運行于操作系統(tǒng)平臺上的C++原生應用還是有它存在的意義,最主要的方面就是接近系統(tǒng)底層,對操作系統(tǒng)資源和底層設備的控制等,其他任何虛擬機上的中間語言是無法望其項背的。

  CORBA是一個為簡化跨平臺應用而提出的規(guī)范,它獨立于網(wǎng)絡協(xié)議、編程語言和軟硬件平臺,支持異構(gòu)的分布式計算環(huán)境和不同編程語言間的對象重用。CORBA可以作為不同平臺應用間信息傳遞的中間件,CORBA通過引入經(jīng)過充分驗證的有效的框架結(jié)構(gòu)和通信手段,最大限度地簡化了網(wǎng)絡通信相關(guān)應用的設計與開發(fā),使得我們可以專注于業(yè)務邏輯的實現(xiàn),而無需關(guān)心通信的細節(jié)。CORBA曾在無數(shù)文章中被稱作“軟總線”,以表明它作為數(shù)據(jù)傳遞通道的基本特性。
  現(xiàn)在存在眾多CORBA實現(xiàn),既有商用的ORBacus、VisiBroker,也有一些優(yōu)秀的開源實現(xiàn),如:TAO、omniORB、MICO等。由于各實現(xiàn)遵從相同的規(guī)范,接口基本一致,所以在熟練應用一種CORBA實現(xiàn)后,轉(zhuǎn)而使用其它實現(xiàn)時,一般不會存在太大的障礙。
  TAO(The ACE ORB)是美國華盛頓大學的Douglas C. Schmidt教授領導開發(fā)的一個實時CORBA平臺,它是一個免費的開放源碼項目,用C++語言開發(fā),符合CORBA2.6規(guī)范。
  支持語言: C++
  支持平臺: Win32,常見的各種Unix/Linux,實時操作系統(tǒng)如VxWorks等等。在所有的CORBA實現(xiàn)中,TAO支持的平臺是最多的。
  支持的服務: Naming、Event、Notification、Security、Time、Scheduling、Logging、Lifecycle、Trading、Concurrency、Lifecycle、A/V Streaming、Load balancing等。

  在日常工作中我們經(jīng)常使用的服務就是Naming服務和Notification服務了。Naming服務讓你可以把自己的遠程對象注冊到一個索引服務中,使用者通過友好的注冊名即可找到提供服務的對象,而不用關(guān)心這個對象運行在那臺機器上。Notification服務給客戶端提供了主動推送消息的機制,而不需要客戶端不斷查詢是否有自己感興趣的消息。
  那么在CORBA中客戶端和服務端通過什么方式約定雙方的通訊協(xié)議呢?這就是IDL語言的功勞了,IDL以一種通用的方式為C/S雙方提供了接口的描述,語法非常類似于C++或Java的類的描述。CORBA提供了專門的工具用來把IDL語言編寫的接口文件編譯成C++或Java能夠理解的樁和框架類,服務端基于IDL編譯器生成的“框架”添加服務實現(xiàn),客戶端調(diào)用IDL編譯器生成的“樁”調(diào)用遠程服務的接口,雙方都不需要關(guān)心對方內(nèi)部如何實現(xiàn),通信數(shù)據(jù)包格式等問題,IDL會為你搞定一切。
  百聞不如一見,通過一個真實的IDL文件例子,看一下接口的定義到底是如何工作的:  

 1 #ifndef ScriptManageService_h__
 2 #define ScriptManageService_h__
 3 
 4 #include "ALEE_ScriptManageDefines.idl"
 5 
 6 module alee {
 7 module ScriptManage {
 8 
 9     //////////////////////////////////////////////////////////////////////////
10     // 腳本管理服務
11     //////////////////////////////////////////////////////////////////////////
12     interface ALEE_ScriptManageService {
13 
14         // 獲取事件類型列表
15         boolean apiGetEventTypes( out EventTypeList_t list );
16 
17         // 列出所有腳本
18         boolean apiGetScriptList( out ScriptList_t list);
19 
20         // 獲取腳本信息
21         boolean apiGetScriptInfo( in long ID, out ScriptInfo_t info );
22 
23         // 保存腳本,ID>0時修改,ID=0時新增,返回新增的ID或原有ID
24         boolean apiSetScriptInfo( in long ID, in ScriptInfo_t info );
25 
26         // 刪除腳本
27         boolean apiDeleteScript( in long ID );
28     };
29 
30 };
31 };
32 
33 #endif // ScriptManageService_h__
34 

  從這個IDL文件中可以看出,這個名為“腳本管理服務”的接口interface ALEE_ScriptManageService中定義了5個方法,調(diào)用IDL編譯器編譯后,生成了下面的6個文件,其中前3個是客戶端的“樁”,后3個是服務端的“框架”。

  然后,就需要我們來實現(xiàn)服務端的接口了,在ALEE_ScriptManageServiceS.h文件中IDL編譯器生成了一個C++的類class ALEE_ScriptManageService,其中包含的幾個純虛函數(shù)就是我們定義的IDL接口方法。

 1 namespace POA_alee
 2 {
 3   namespace ScriptManage
 4   {
 5     class UBISALEE_API ALEE_ScriptManageService
 6       : public virtual PortableServer::ServantBase
 7     {
 8     protected:
 9       ALEE_ScriptManageService (void);
10     
11     public:
12       ALEE_ScriptManageService (const ALEE_ScriptManageService& rhs);
13       virtual ~ALEE_ScriptManageService (void);
14       
15       virtual ::CORBA::Boolean apiGetEventTypes (::alee::ScriptManage::EventTypeList_t_out list) = 0;
16       virtual ::CORBA::Boolean apiGetScriptList (::alee::ScriptManage::ScriptList_t_out list) = 0;
17       virtual ::CORBA::Boolean apiGetScriptInfo (::CORBA::Long ID,::alee::ScriptManage::ScriptInfo_t_out info) = 0;
18       virtual ::CORBA::Boolean apiSetScriptInfo (::CORBA::Long ID,const ::alee::ScriptManage::ScriptInfo_t & info) = 0;
19       virtual ::CORBA::Boolean apiDeleteScript (::CORBA::Long ID) = 0;
20     };
21   } // module alee::ScriptManage
22 // module alee
23 

  我們要實現(xiàn)這個接口,就需要添加一個子類繼承這個接口類:
 1 
 2 class ALEE_ScriptManageService_i : public POA_alee::ScriptManage::ALEE_ScriptManageService
 3 {
 4     ORB_Objects &       m_orb;
 5     ALEE_DataBase_Impl &m_dat;
 6     ALEE_ScriptList_t & m_scripts;
 7 
 8 public:
 9     ALEE_ScriptManageService_i(ORB_Objects &orb,ALEE_DataBase_Impl &dat,ALEE_ScriptList_t & scripts);
10     ~ALEE_ScriptManageService_i(void);
11 
12     virtual CORBA::Boolean apiGetEventTypes(EventTypeList_t_out list);
13     virtual CORBA::Boolean apiGetScriptList(ScriptList_t_out list);
14     virtual CORBA::Boolean apiGetScriptInfo(CORBA::Long ID,ScriptInfo_t_out info);
15     virtual CORBA::Boolean apiSetScriptInfo(CORBA::Long ID,const ScriptInfo_t & info);
16     virtual CORBA::Boolean apiDeleteScript (CORBA::Long ID);
17 };
18 

  具體實現(xiàn)方法不必多言,就像寫一個普通的C++類一樣即可。我們關(guān)心的問題是服務類寫好了,客戶端如何知道這個類在哪里?
  下面就需要把我們的接口實現(xiàn)注冊到Naming服務中,ORB_Objects類是一個ORB對象的封裝類,是為了方便而把ORB下文相關(guān)的對象都放在了一起,暫時把它當成是個ORB的句柄,負責與軟總線ORB通訊即可。
 1 
 2 #define SERVICE_NAME "ALEE_ScriptManageService"
 3 
 4 ALEE_ScriptManageService_i::ALEE_ScriptManageService_i(ORB_Objects &        orb,
 5                                                        ALEE_DataBase_Impl & dat,
 6                                                        ALEE_ScriptList_t &  scripts) :
 7 m_orb(orb),
 8 m_dat(dat),
 9 m_scripts(scripts)
10 {
11     m_orb.rebind_name(SERVICE_NAME,_this());
12 }
13 
  m_orb是在服務端啟動時初始化的一個ORB_Objects實例,在創(chuàng)建“腳本管理服務”時通過構(gòu)造函數(shù)傳入了一個引用,在服務類實例化時,調(diào)用m_orb把自己注冊到Naming服務里,這樣客戶端就可以通過訪問名字服務知道我們的服務所在的位置。

  上手了CORBA之后,才發(fā)現(xiàn)自己原來設想的C++實現(xiàn)遠程服務對象調(diào)用(http://m.shnenglu.com/cppx/archive/2009/07/22/90820.html)實在是原始而又弱智的夢囈。
  先寫到這里吧,關(guān)于客戶端調(diào)用的方法,下回分解! 
posted on 2011-02-16 19:54 風雷九州 閱讀(3932) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導航: 博客園   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成人免费精品| 欧美激情亚洲自拍| 麻豆av一区二区三区| 久久久久国产成人精品亚洲午夜| 久久国产精品一区二区| 欧美尤物巨大精品爽| 久久久久久黄| 欧美国产亚洲精品久久久8v| 欧美精选一区| 欧美天堂亚洲电影院在线播放| 国产精品v亚洲精品v日韩精品| 国产精品免费电影| 国产一二精品视频| 在线播放中文一区| 久久亚洲图片| 媚黑女一区二区| 欧美视频中文一区二区三区在线观看| 国产精品狠色婷| 黄色亚洲网站| 一本久久综合亚洲鲁鲁| 香蕉久久夜色精品| 美女视频网站黄色亚洲| 最新日韩av| 亚洲电影av| 亚洲淫性视频| 麻豆国产精品777777在线| 麻豆九一精品爱看视频在线观看免费| 欧美日韩国产区| 欧美视频二区| 国产美女精品免费电影| 国产婷婷精品| 亚洲国产va精品久久久不卡综合| 亚洲精品在线三区| 亚洲免费一区二区| 久久免费视频在线| 最新国产成人av网站网址麻豆| 亚洲午夜性刺激影院| 欧美在线网站| 欧美激情久久久| 国产精品久久久久久av福利软件 | 亚洲欧洲99久久| 欧美在线视频不卡| 欧美国产精品劲爆| 日韩视频―中文字幕| 午夜欧美不卡精品aaaaa| 久久久一二三| 欧美亚洲成人免费| 伊人男人综合视频网| 亚洲一级一区| 免费成人性网站| 亚洲午夜电影网| 久久综合狠狠综合久久激情| 欧美日韩一区二区三| 国产一区二区三区在线播放免费观看| 最近中文字幕mv在线一区二区三区四区| 夜夜夜精品看看| 久热国产精品| 欧美成人一二三| 久久午夜影视| 欧美国产日本高清在线| 欧美激情综合色| 久久国产精品毛片| 国产精品豆花视频| 91久久中文| 久久米奇亚洲| 一区二区av| 亚洲精品一区二区三区樱花| 亚洲欧洲av一区二区三区久久| 欧美高清在线视频| 精品99视频| 久久精品亚洲国产奇米99| 999亚洲国产精| 欧美寡妇偷汉性猛交| 亚洲国产成人久久综合一区| 亚洲精品免费网站| 久久av二区| 久久精品亚洲国产奇米99| 久久久视频精品| 国产一区深夜福利| 欧美一区二区在线| 亚洲欧美国产精品桃花| 国产精品裸体一区二区三区| 亚洲午夜性刺激影院| 99视频有精品| 欧美日韩在线大尺度| 在线观看日韩国产| 欧美一区二区在线看| 国产精品99久久99久久久二8| 欧美日韩激情网| 一本色道久久88综合日韩精品 | 亚洲一区视频| 国产精品女人网站| 香蕉久久夜色| 久久国产欧美| 国产精品国产成人国产三级| 性色av一区二区三区在线观看| 亚洲深夜av| 国产色婷婷国产综合在线理论片a| 亚洲一区日韩在线| 亚洲男人第一av网站| 国产亚洲观看| 老司机一区二区| 欧美xx69| 亚洲综合另类| 欧美亚洲综合另类| 影院欧美亚洲| 亚洲人成人一区二区在线观看| 欧美视频在线观看 亚洲欧| 午夜伦理片一区| 久久gogo国模啪啪人体图| 在线欧美不卡| 99精品久久久| 国产一区二区三区四区三区四| 欧美一区二区三区免费大片| 中文精品一区二区三区| 久久久噜噜噜久久人人看| 国产亚洲a∨片在线观看| 欧美一级片在线播放| 在线综合视频| 国产精品天美传媒入口| 欧美3dxxxxhd| 国产精品久久久久久久电影| 久久精品国产69国产精品亚洲| 美女黄毛**国产精品啪啪 | 亚洲激情在线视频| 国产精品乱人伦一区二区| 牛牛影视久久网| 欧美亚洲不卡| 欧美激情视频在线播放| 国产精品第十页| 欧美高清视频免费观看| 国产精品网站在线播放| 亚洲电影成人| 国产亚洲高清视频| 中文精品99久久国产香蕉| 亚洲久久一区| 久久天天躁狠狠躁夜夜爽蜜月| 欧美怡红院视频| 久久黄金**| 中国成人黄色视屏| 久久久久久网站| 久久爱www久久做| 欧美性猛交xxxx乱大交退制版| 欧美成人精品在线| 国产一区二区三区日韩| 亚洲在线一区| 中文日韩在线视频| 欧美精品免费播放| 亚洲成色777777女色窝| 一区一区视频| 欧美专区一区二区三区| 亚洲人成亚洲人成在线观看图片 | 欧美激情国产日韩精品一区18| 亚洲精品免费观看| 亚洲一区黄色| 国产伦精品一区二区三区高清版| 欧美大片免费观看在线观看网站推荐| 国产毛片一区| 午夜精品视频一区| 先锋影音一区二区三区| 国产精品男gay被猛男狂揉视频| 在线天堂一区av电影| 亚洲午夜精品17c| 欧美日韩在线不卡一区| 在线亚洲免费视频| 在线综合视频| 欧美日韩中文另类| 一区二区三区免费网站| 亚洲自拍偷拍视频| 国产精品视频观看| 翔田千里一区二区| 久久久精品一区| 欧美色另类天堂2015| 99精品免费网| 久久成人精品一区二区三区| 国产一区二区电影在线观看| 久久大逼视频| 欧美大片一区二区三区| 亚洲欧洲一区二区三区在线观看| 欧美1区3d| 一区二区三区|亚洲午夜| 午夜一区二区三视频在线观看| 国产精品视频一区二区三区| 亚洲欧美精品伊人久久| 久久久久国产精品一区二区| 在线日韩精品视频| 久久天天躁狠狠躁夜夜爽蜜月| 国产精品一区二区男女羞羞无遮挡 | 欧美 日韩 国产精品免费观看| 亚洲国产精品久久久| 欧美精品久久久久久久免费观看| 亚洲午夜精品福利| 久久视频免费观看| 亚洲区一区二区三区| 国产精品亚洲综合天堂夜夜| 久久综合久久综合这里只有精品 | 一区二区高清视频在线观看| 欧美亚洲自偷自偷| 亚洲国产精品va在看黑人|