• <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>

            大龍的博客

            常用鏈接

            統計

            最新評論

            ACE與ASIO之間關于Socket編程的比較

             

            ACE與ASIO之間關于Socket編程的比較

            轉自:FREE MY SOUL

            ACE是一個很成熟的中間件產品,為自適應通訊環境,但它過于宏大,一堆的設計模式,架構是一層又一層,對初學者來說,有點困難。
            ASIO是基本Boost開發的異步IO庫,封裝了Socket,簡化基于socket程序的開發。

            最近分析ASIO的源代碼,讓我無不驚呀于它設計。在ACE中開發中的內存管理一直讓人頭痛,ASIO的出現,讓我看到新的曙光,成為我新的好伙伴。簡單地與ACE做個比較。

            1.層次架構:
            ACE底層是C風格的OS適配層,上一層基于C++的wrap類,再上一層是一些框架(Accpetor, Connector,Reactor等),最上一層是框架上服務。
            ASIO與之類似,底層是OS的適配層,上一層一些模板類,再上一層模板類的參數化(TCP/UDP),再上一層是服務,它只有一種框架為io_service。

            2.涉及范圍:
            ACE包含了日志,IPC,線程,共享內存,配置服務等。
            ASIO只涉及到Socket,提供簡單的線程操作。

            3.設計模式:
            ACE主要應用了Reactor,Proactor等。
            而ASIO主要應用了Proactor。

            4.線程調度:
            ACE的Reactor是單線程調度,Proactor支持多線程調度。
            ASIO支持單線程與多線程調度。

            5.事件分派處理:
            ACE主要是注冊handler類,當事件分派時,調用其handler的虛掛勾函數。實現ACE_Handler/ACE_Svc_Handler/ACE_Event_handler等類的虛函數。
            ASIO是基于函數對象的hanlder事件分派。任何函數都可能成功hanlder,少了一堆虛表的維護,調度上優于ACE。

            6.發布方式:
            ACE是開源免費的,不依賴于第3方庫, 一般應用使用它時,以動態鏈接的方式發布動態庫。
            ASIO是開源免費的,依賴Boost,應用使用時只要include頭文件,不需動態庫。

            7.可移植性:
            ACE支持多種平臺,可移植性不存在問題,據說socket編程在linux下有不少bugs。
            ASIO支持多種平臺,可移植性不存在問題。

            8.開發難度:
            基于ACE開發應用,對程序員要求比較高,要用好它,必須非常了解其框架。在其框架下開發,往往new出一個對象,不知在什么地方釋放好。
            基于ASIO開發應用,要求程序員熟悉函數對象,函數指針,熟悉boost庫中的boost::bind。內存管理控制方便。


            我個人覺得,如果應用socket編程,使用ASIO開發比較好,開發效率比較高。ACE適合于理論研究,它本來就是源于Douglas的學術研究。

            posted on 2007-09-22 09:52 大龍 閱讀(3614) 評論(3)  編輯 收藏 引用

            評論

            # re: ACE與ASIO之間關于Socket編程的比較 2008-05-15 18:09 xbzg

            ms asio需要動態庫的 boost135 vc2005

            #include "stdafx.h"
            #include <boost/asio.hpp>

            int _tmain(int argc, _TCHAR* argv[])
            {
            return 0;
            }

            1>e:\boost135\boost_1_35_0\boost\utility\enable_if.hpp : warning C4819: 該文件包含不能在當前代碼頁(936)中表示的字符。請將該文件保存為 Unicode 格式以防止數據丟失
            1>e:\boost135\boost_1_35_0\boost\config\abi_prefix.hpp : warning C4819: 該文件包含不能在當前代碼頁(936)中表示的字符。請將該文件保存為 Unicode 格式以防止數據丟失
            1>e:\boost135\boost_1_35_0\boost\config\abi_suffix.hpp : warning C4819: 該文件包含不能在當前代碼頁(936)中表示的字符。請將該文件保存為 Unicode 格式以防止數據丟失
            1>e:\boost135\boost_1_35_0\boost\utility\enable_if.hpp : warning C4819: 該文件包含不能在當前代碼頁(936)中表示的字符。請將該文件保存為 Unicode 格式以防止數據丟失
            1>正在鏈接...
            1>LINK : fatal error LNK1104: 無法打開文件“libboost_system-vc80-mt-gd-1_35.lib”
            1>生成日志保存在“file://e:\暫存\VC2005 Projects\testBoostSpirit\testBoostSpirit\Debug\BuildLog.htm”
            1>testBoostSpirit - 1 個錯誤,4 個警告
            ========== 生成: 0 已成功, 1 已失敗, 0 最新, 0 已跳過 ==========

              回復  更多評論   

            # re: ACE與ASIO之間關于Socket編程的比較 2008-05-15 19:56 Kevin Lynx

            @xbzg
            忽略即可,基本上你還需要忽略其他幾個默認鏈接的boost庫  回復  更多評論   

            # re: ACE與ASIO之間關于Socket編程的比較 2008-06-01 10:29 classyk

            asio終于在boost 1.45里正式推出了,輕量級的設計還是不錯的。希望以后不要發展到和ACE一樣臃腫  回復  更多評論   

            久久久久久亚洲精品无码| 情人伊人久久综合亚洲| 日本五月天婷久久网站| 久久久亚洲AV波多野结衣| 漂亮人妻被黑人久久精品| 久久久99精品成人片中文字幕| 欧美日韩精品久久免费| 丰满少妇人妻久久久久久4| 偷偷做久久久久网站| 精品熟女少妇aⅴ免费久久| 久久狠狠爱亚洲综合影院| 香蕉久久一区二区不卡无毒影院| 久久久久久久久波多野高潮| 93精91精品国产综合久久香蕉| 无码伊人66久久大杳蕉网站谷歌| 国产高潮久久免费观看| 蜜臀av性久久久久蜜臀aⅴ麻豆 | 欧美777精品久久久久网| 久久精品青青草原伊人| 久久久久亚洲AV成人网人人网站 | 熟妇人妻久久中文字幕| 久久亚洲国产成人影院| 久久影视综合亚洲| 久久久久国产精品嫩草影院| 成人a毛片久久免费播放| 国内精品久久久久影院免费| 国产亚洲综合久久系列| 日韩精品久久久久久免费| 中文字幕乱码人妻无码久久| 欧美亚洲国产精品久久| 综合人妻久久一区二区精品| 亚洲性久久久影院| 久久99热这里只有精品国产| 久久99精品久久久大学生| 国内精品综合久久久40p| 亚洲日本va中文字幕久久| 色综合久久久久无码专区| 无码AV波多野结衣久久| 国产精品久久久久…| 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲 | 久久九九久精品国产免费直播|