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

隨筆 - 6  文章 - 11  trackbacks - 0
<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用鏈接

留言簿(1)

隨筆檔案

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

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

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

  在日常工作中我們經常使用的服務就是Naming服務和Notification服務了。Naming服務讓你可以把自己的遠程對象注冊到一個索引服務中,使用者通過友好的注冊名即可找到提供服務的對象,而不用關心這個對象運行在那臺機器上。Notification服務給客戶端提供了主動推送消息的機制,而不需要客戶端不斷查詢是否有自己感興趣的消息。
  那么在CORBA中客戶端和服務端通過什么方式約定雙方的通訊協議呢?這就是IDL語言的功勞了,IDL以一種通用的方式為C/S雙方提供了接口的描述,語法非常類似于C++或Java的類的描述。CORBA提供了專門的工具用來把IDL語言編寫的接口文件編譯成C++或Java能夠理解的樁和框架類,服務端基于IDL編譯器生成的“框架”添加服務實現,客戶端調用IDL編譯器生成的“樁”調用遠程服務的接口,雙方都不需要關心對方內部如何實現,通信數據包格式等問題,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個方法,調用IDL編譯器編譯后,生成了下面的6個文件,其中前3個是客戶端的“樁”,后3個是服務端的“框架”。

  然后,就需要我們來實現服務端的接口了,在ALEE_ScriptManageServiceS.h文件中IDL編譯器生成了一個C++的類class ALEE_ScriptManageService,其中包含的幾個純虛函數就是我們定義的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 

  我們要實現這個接口,就需要添加一個子類繼承這個接口類:
 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 

  具體實現方法不必多言,就像寫一個普通的C++類一樣即可。我們關心的問題是服務類寫好了,客戶端如何知道這個類在哪里?
  下面就需要把我們的接口實現注冊到Naming服務中,ORB_Objects類是一個ORB對象的封裝類,是為了方便而把ORB下文相關的對象都放在了一起,暫時把它當成是個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實例,在創建“腳本管理服務”時通過構造函數傳入了一個引用,在服務類實例化時,調用m_orb把自己注冊到Naming服務里,這樣客戶端就可以通過訪問名字服務知道我們的服務所在的位置。

  上手了CORBA之后,才發現自己原來設想的C++實現遠程服務對象調用(http://m.shnenglu.com/cppx/archive/2009/07/22/90820.html)實在是原始而又弱智的夢囈。
  先寫到這里吧,關于客戶端調用的方法,下回分解! 
posted on 2011-02-16 19:54 風雷九州 閱讀(3930) 評論(0)  編輯 收藏 引用
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲美女视频在线观看| 国产精品国内视频| 久久久999精品| 亚洲精品影院在线观看| 国产日韩精品一区二区浪潮av| 国产精品yjizz| 欧美吻胸吃奶大尺度电影| 欧美激情1区| 欧美午夜片在线观看| 欧美日韩在线播放三区| 国产精品日韩电影| 国产日韩综合一区二区性色av| 国产精品嫩草影院一区二区| 国产一区二区三区无遮挡| 国产婷婷一区二区| 亚洲国产三级网| 亚洲欧洲日本国产| 亚洲精品一区二区三区不| 日韩午夜av| 亚洲午夜国产一区99re久久| 久久久久久免费| 欧美成人国产va精品日本一级| 一区二区欧美日韩视频| 亚洲欧美日本日韩| 久久综合伊人77777| 国产精品久久久久久久久久妞妞 | 在线观看日韩精品| 在线精品国精品国产尤物884a| 一本一本久久| 欧美一区二区三区免费视频| 亚洲小说春色综合另类电影| 麻豆av福利av久久av| 欧美激情综合色| 欧美一区二区三区四区在线 | 鲁鲁狠狠狠7777一区二区| 国产精品福利久久久| 国产精品毛片| 亚洲精品久久久久久久久久久| 亚洲在线播放电影| 午夜电影亚洲| 亚洲裸体在线观看| 久久国产精品毛片| 国产精品视频午夜| 久久久久91| 国产精品美女一区二区| 激情综合色综合久久综合| 亚洲美女毛片| 亚洲福利视频专区| 亚洲美女视频在线观看| 久久综合色综合88| 国产乱码精品一区二区三| 亚洲精品国产精品久久清纯直播| 久久夜色精品国产欧美乱| 日韩一二三在线视频播| 欧美激情视频一区二区三区免费| 国产日韩综合| 国产精品日韩欧美| 亚洲一区二区三区高清| 亚洲大胆视频| 蘑菇福利视频一区播放| 国产一区高清视频| 久久久久久亚洲精品杨幂换脸| 亚洲伦理网站| 久久久久在线| 亚洲国产日日夜夜| 蜜桃精品久久久久久久免费影院| 性久久久久久久| 国产精品第2页| 亚洲欧美日韩国产成人| 日韩写真在线| 国产精品综合色区在线观看| 一区二区高清在线| 亚洲国产精品一区二区www在线| 牛牛影视久久网| 亚洲国产精品电影在线观看| 免费在线播放第一区高清av| 欧美在线免费看| 永久免费精品影视网站| 浪潮色综合久久天堂| 欧美制服第一页| 91久久久国产精品| 亚洲国产精品va在线看黑人动漫| 欧美另类女人| 亚洲桃色在线一区| 午夜在线视频观看日韩17c| 国产一级揄自揄精品视频| 99天天综合性| 亚洲制服丝袜在线| 国产一区二区三区丝袜| 亚洲国产精品电影| 欧美精品色一区二区三区| 性欧美videos另类喷潮| 亚洲自拍高清| 亚洲精品影视在线观看| 欧美日韩国产综合一区二区 | 久久国产色av| 欧美一区二区精品久久911| 亚洲国产欧美一区二区三区丁香婷| 亚洲国产小视频| 欧美在线一区二区| 欧美freesex8一10精品| 亚洲最新色图| 久久一区中文字幕| 久久人人精品| 亚洲欧美日韩国产另类专区| 亚洲欧美一区二区三区极速播放 | 亚洲欧美国产高清| 在线观看91久久久久久| 欧美激情一区二区三区成人| 国产精品国产a级| 久久婷婷久久| 国产精品每日更新在线播放网址| 久久精品在线播放| 免费亚洲一区| 久久三级福利| 欧美日本乱大交xxxxx| 久久免费视频网| 欧美巨乳在线观看| 欧美成人精品一区二区三区| 欧美日韩亚洲一区二区三区在线观看| 久久蜜臀精品av| 国产精品久久久久99| 在线视频亚洲欧美| 欧美精品一区二区精品网| 欧美怡红院视频| 欧美日一区二区三区在线观看国产免| 久久激情综合| 国产精品夜色7777狼人| 亚洲国产日韩欧美一区二区三区| 激情小说另类小说亚洲欧美 | 男人的天堂亚洲在线| 国产精品久久久久久久第一福利| 欧美大尺度在线| 欧美www在线| 久久深夜福利| 加勒比av一区二区| 亚洲欧美精品suv| 亚洲综合首页| 欧美成人r级一区二区三区| 一区二区久久久久| 欧美日韩精品一区二区三区四区| 蜜臀av一级做a爰片久久 | 久久中文字幕一区| 欧美影院视频| 欧美成人综合在线| 亚洲第一成人在线| 国产精品免费区二区三区观看| 久久久久免费视频| 在线观看日韩av| 欧美中文字幕久久| 欧美成人a∨高清免费观看| 伊人婷婷欧美激情| 欧美成人第一页| 91久久久一线二线三线品牌| 亚洲精品精选| 欧美国产日韩一区二区| 日韩视频在线你懂得| 一本色道久久加勒比精品| 亚洲欧美日韩国产综合在线 | 亚洲高清资源| 欧美大片va欧美在线播放| 女人香蕉久久**毛片精品| 欧美极品在线视频| 欧美91福利在线观看| 欧美视频在线不卡| 日韩一区二区福利| 1024欧美极品| 欧美日韩精品免费观看| 夜夜精品视频一区二区| 久久精品中文字幕一区二区三区| 国产一区二区三区av电影| 狼人天天伊人久久| 亚洲精品国产视频| 久久成人精品无人区| 国内成人精品一区| 欧美激情日韩| 99综合电影在线视频| 亚洲一区欧美二区| 国产精品一区二区久激情瑜伽| 久久婷婷丁香| 亚洲精品一区二区三区蜜桃久| 欧美在线资源| 亚洲欧洲日韩综合二区| 国产乱码精品一区二区三区av| 久久久久国产精品一区| 日韩视频亚洲视频| 久久久777| 欧美日精品一区视频| 久久av最新网址| 激情欧美国产欧美| 国产精品美女主播| 久久裸体艺术| 香蕉免费一区二区三区在线观看 | 亚洲免费中文字幕| 蜜桃av综合| 久久久久久高潮国产精品视| 亚洲精品综合精品自拍| 国产欧美一区二区精品秋霞影院| 久久久久免费观看| 久久激情久久|