一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

RCF—用于C++的進(jìn)程間通訊(4)

 just_person 2012-03-29

可擴(kuò)展性

傳輸

對于前一個版本的RCF,一個(應(yīng)得的)批評是關(guān)于它和TCP協(xié)議過度緊密的關(guān)系?,F(xiàn)在RCF采用了傳輸無關(guān)的設(shè)計,并且對于初用者,可以使用它支持的TCPUDP協(xié)議。更重要的是,它的架構(gòu)很容易支持第三方開發(fā)自己的客戶端/服務(wù)器端的傳輸。在客戶端,I_ClientTransport基類給客戶端調(diào)用提供了鉤子。在服務(wù)器端,需要寫一個服務(wù)。

RcfServer服務(wù)

RcfServer通過服務(wù)的概念來容納第三方擴(kuò)展。當(dāng)服務(wù)器開始和停止時,這些服務(wù)將會被通知到,服務(wù)也可以在服務(wù)器運行時被動態(tài)添加和移除。一個典型的服務(wù)可能是綁定一個對象到服務(wù)器的接口,請求服務(wù)器創(chuàng)建一個線程然后做一些定期的活動。

服務(wù)器的傳輸就是以服務(wù)的形式實現(xiàn)的,所以一個RcfServer對象可以擁有多個傳輸。一些可用的服務(wù)如下:

l         ObjectFactoryService:允許客戶端在服務(wù)器端創(chuàng)建對象

l         FilterService:允許服務(wù)器為了響應(yīng)客戶端的請求而動態(tài)加載過濾器

l         PublishingService:使能服務(wù)器的發(fā)布功能

l         SubscriptionService:使能服務(wù)器的訂閱功能

I_Service是所有服務(wù)的基類,在相關(guān)文檔里有描述。查看前面提到的服務(wù)的源代碼,從而來了解I_Service如何實現(xiàn)的。

可移植性

編譯器

RCF 0.4已經(jīng)在Visual C++ 7.1, Visual C++ 8.0, gcc 3.x, Borland C++ 5.6, Metrowerks CodeWarrior 9.2上面測試過。另外,RCF 0.9c支持在Visual C++ 6.0gcc 2.95上編譯。

平臺

RCF的服務(wù)器實現(xiàn)是基于Win32I/O完成端口(completion port)的,所以限制在了Windows2000和以后的版本。TCP的客戶端和UDP客戶端/服務(wù)器端都是基于BSD套接字實現(xiàn)的,所以具有很好的移植性。在非Windows平臺上(Windows上可選的),RCF利用asio庫來實現(xiàn)TCP服務(wù)器。

編譯

一般來說,為了編譯使用RCF的應(yīng)用程序,你需要在你的應(yīng)用程序代碼里包含src/RCF/RCF.cpp。你還會需要Boost庫的頭文件(最近的任何版本應(yīng)該都可以)。如果你打算用Boost.Serialization,你需要1.31.0或者更新的版本。

可以用一些預(yù)編譯符號(preprocessor symbols)來控制RCF哪些部分將被編譯。這些符號需要在全局定義,比如在工程的設(shè)置里定義而不是定義在代碼里。

l         RCF_USE_BOOST_THREADS:利用Boost線程庫mutex和線程創(chuàng)建功能。如果沒有定義,RCF將不再是線程安全的。

l         RCF_USE_BOOST_READ_WRITE_MUTEX:利用1.32.0版本的Boost庫的讀/mutex。如果沒有定義,將使用一個簡單的替代。只有當(dāng)RCF_USE_BOOST_THREADS定義時才有效。

l         RCF_USE_ZLIB:編譯對Zlib壓縮的支持。

l         RCF_USE_OPENSSL:編譯對OpenSSL加密(過濾器)的支持。

l         RCF_USE_BOOST_SERIALIZATION:編譯對Boost.Serialization庫的支持。

l         RCF_USE_SF_SERIALIZATION:編譯對RCF內(nèi)建的序列化框架的支持。如果RCF_USE_BOOST_SERIALIZATIONRCF_USE_SF_SERIALIZATION都沒有被定義,RCF_USE_SF_SERIALIZATION將會被自動定義。

l         RCF_NO_AUTO_INIT_DEINIT:禁止RCF的自動初始化和反初始化功能。如果定義了,用戶需要在適當(dāng)?shù)臅r間顯示地調(diào)用RCF::init()RCF::deinit()。特別地,當(dāng)把RCF編譯成DLL時,需要去定義這個預(yù)編譯符號,從而防止過早地初始化。

總的來說,對第三方庫的依賴(Boost.ThreadsBoost.SerializationZlibOpenSSL)是可選的。編譯這些庫的說明已經(jīng)超出本篇文章的范圍,但是如果你在編譯Boost庫時有困難,一個可行的方法是使用Boost的編譯工具—bjam,然后編譯相應(yīng)的CPP文件到你的應(yīng)用程序里。

例如,為了使用Boost.Threads庫,你只要包含boost_root/libs/thread/src目錄下的CPP文件到你的工程中。然后在boost_root/boost/thread/detail/config.hpp文件里定義一個合適的預(yù)編譯符號(可能是BOOST_THREAD_USE_LIB)。

測試

在下載的目錄里有個/test目錄,里面有全面的測試代碼,所有的代碼都應(yīng)該能夠成功編譯運行。這次測試代碼應(yīng)該能夠用Boost.Build工具自動編譯和運行,或者手動編譯運行。這次測試代碼不僅有我所描述的這些功能,對于用戶來說也可以提供更多有用的信息。

反饋

這個庫的現(xiàn)在和將來的形狀和范圍很大程度上都依賴我從用戶那里得到的反饋。所以敬請發(fā)表你們的看法,歡迎任何的觀點。你可以在這里提出問題,或者給我發(fā)email。

當(dāng)然,我要感謝那些在前一個版本給出幫助的人。

歷史

  • 2005-12-23 – 版本 0.1 發(fā)布
  • 2006-04-06 – 版本 0.2 發(fā)布

RCF現(xiàn)在可以在LinuxSolarisWindows上編譯運行,服務(wù)器端和客戶端可以分布在多個平臺上,并且可以無縫地通訊。

在非Windows平臺上,為了使用RCF,asio網(wǎng)絡(luò)庫是首要必備的。下載asio并確保asio頭文件對于你的編譯器是可用的,在編譯RCF時還要確保已經(jīng)定義了RCF_USE_ASIO預(yù)編譯符號。Asio庫需要1.33.0或者更新的Boost庫,為了避免Boost的依賴庫,你可能需要定義BOOST_DATE_TIME_NO_LIB預(yù)編譯符號。

RCF 0.2已經(jīng)在下列編譯器上進(jìn)行了編譯和測試:

    • gcc 3.2 (MinGW on Windows)
    • gcc 3.3 (Linux)
    • gcc 3.4 (Solaris)
    • Borland C++ 5.6
    • Metrowerks CodeWarrior 9.2
    • Microsoft Visual C++ 7.1
    • Microsoft Visual C++ 8.0

很多在這個論壇上報告的bug已經(jīng)被修復(fù)了。

向那些等待這個版本發(fā)布的人道歉,我本來計劃幾個月之前發(fā)布的,但是由于繁忙的工作安排(還有一些難處理的測試?yán)└蓴_了版本的正常發(fā)布。對不起!

  • 2006-07-30 – 版本 0.3 發(fā)布
    • RCFasio的支持已經(jīng)從版本0.3.5升級到版本0.3.7,這個工作是David Bergman.完成的,謝謝David!
    • 去掉了對asion 0.3.5的支持。
    • 預(yù)編譯符號由RCF_USE_ASIO變?yōu)?/span>RCF_USE_BOOST_ASIO。
  • 2006-09-19 – 版本 0.4 發(fā)布
    • 64位兼容性: RCF可以編譯和運行在64位的Solaris, LinuxWindows平臺上。
    • 對于std::vector<T>的快速序列化。這里的T是原始類型 (char, int)
    • 對于使用RCF來進(jìn)行32位和64位系統(tǒng)見通訊,可以通過使用boosttypedefboost::int32_t,boost::uint32_tboost::int64_tboost::uint64_t來代替longstd::size_t,從而避免32位系統(tǒng)和64位系統(tǒng)之間的差異導(dǎo)致的序列化錯誤。

o        最后,感謝不倫瑞克技術(shù)大學(xué)的S??ren Freudiger,感謝他借給我64Linux機(jī)器的賬號。

  • 2007-07-11 – 版本 0.9c 發(fā)布
    • RCF 0.9cRCF 1.0的預(yù)發(fā)布版,現(xiàn)在可以從Google Code下載。隨著一年多的開發(fā),RCF 0.9c重新構(gòu)建和升級了RCF 0.4。被用作一個主要的ECM平臺的網(wǎng)絡(luò)基礎(chǔ),RCF建立了自己的地位。
    • 使用RCF 0.4的應(yīng)用程序升級到RCF 0.9c會有一些困難。如果你在升級到0.9c時候遇到任何認(rèn)為,請隨時和我聯(lián)系。我會幫助你解決。
    • RCF 0.9c的特性有:
      • 為了快速和可伸縮的性能的零拷貝,零堆內(nèi)存分配內(nèi)核
      • SSPI過濾器,為了在Windows平臺上,傳輸KerberosNTLM認(rèn)證和加密
      • OpenSSL過濾器,為傳輸SSL認(rèn)證和加密
      • 服務(wù)器端的多線程
      • 服務(wù)器端的會話對象
      • 內(nèi)建的運行時版本識別為了前向和后向兼容
      • 健壯的發(fā)布訂閱功能
      • 支持老的編譯器,也就是Visual C++ 6, Borland C++ Builder 6gcc2.95
      • 支持64位編譯器
  • 2007-08-23 – 文章內(nèi)容更新
  • 2008-04-28 – 版本 0.9d-P1 發(fā)布
    • RCF 0.9d-P1RCF-0.9d的一個預(yù)覽版。它在WindowsVisual C++編譯器下(6.0, 7.1, 8.0, 9.0)經(jīng)過全面的測試。RCF 0.9d發(fā)布版將包含對LinuxSolaris的全面支持,和以用戶指導(dǎo)手冊形式的豐富的文檔。
    • 可以從Google Code的下載頁面下載。
    • RCF 0.9d特性包括:
      • Win32的命名管道傳輸實現(xiàn) (RCF::Win32NamedPipeEndpoint)
      • 不再需要Boost.Thread
      • UDP的多播和廣播
      • SF序列化對boost::tuple, boost::variant boost::any 的支持
      • 支持從DLL導(dǎo)出RCF
      • 兼容Boost的最新版本 (1.35.0)Boost.Asio (0.3.8+)版本
      • RCF 0.9c的兼容

許可

請注意:每個下載的代碼都是獨立的。對代碼和文章的協(xié)議如下:

  • The article is licensed under The Code Project Open License (CPOL)
  • RCF 0.4 is licensed under the MIT license
  • RCF 0.9c and successors are licensed under the GPL license

關(guān)于作者

Jarl Lindrud

軟件開發(fā)者,前瑞典居民,現(xiàn)在居住在澳大利亞的堪培拉。工作在分布式C++應(yīng)用程序方面。作者喜歡程序設(shè)計,但更喜歡滑雪和乒乓球運動。別人提到他時他會感到非常大的滿足。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    人妻露脸一区二区三区| 日本精品中文字幕在线视频| 日本一二三区不卡免费| 日韩人妻毛片中文字幕| 国产一区欧美午夜福利| 性欧美唯美尤物另类视频 | 高清不卡视频在线观看| 亚洲av日韩一区二区三区四区| 欧美午夜色视频国产精品| 国产在线视频好看不卡| 人妻一区二区三区多毛女| 日韩人妻av中文字幕| 福利视频一区二区三区| 国产一区二区三区四区中文| 美女激情免费在线观看| 欧美激情一区=区三区| 久久黄片免费播放大全 | 日系韩系还是欧美久久| 国产又黄又猛又粗又爽的片| 欧美精品在线播放一区二区| 欧美91精品国产自产| 精品国产av一区二区三区不卡蜜| 日本欧美一区二区三区就| 天堂热东京热男人天堂| 日韩一区二区三区嘿嘿| 亚洲欧美日韩另类第一页| 日韩成人h视频在线观看| 福利视频一区二区在线| 亚洲av在线视频一区| 91偷拍视频久久精品| 国产亚洲精品香蕉视频播放| 亚洲成人久久精品国产| 国产欧美一区二区另类精品| 欧美韩日在线观看一区| 日本大学生精油按摩在线观看| 国产免费成人激情视频| 欧美一区二区三区喷汁尤物| 亚洲另类欧美综合日韩精品| 欧美特色特黄一级大黄片| 日韩人妻毛片中文字幕| 激情中文字幕在线观看|