ACE與ASIO之間關於Socket程式設計的比較

2021-04-13 09:59:13 字數 1331 閱讀 7351

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的學術研究。

ACE與ASIO之間關於Socket程式設計的比較

ace是乙個很成熟的中介軟體產品,為自適應通訊環境,但它過於巨集大,一堆的設計模式,架構是一層又一層,對初學者來說,有點困難。asio是基本boost開發的非同步io庫,封裝了socket,簡化基於socket程式的開發。最近分析asio的源 讓我無不驚呀於它設計。在ace中開發中的記憶體管理一直讓...

關於Function類與Object之間的關係

js中的所有類,本身具有三種身份 1.函式 可以直接被呼叫 2.物件 應該有其所屬類鏈 3.類,擁有prototype原型 原型所指例項中必然存在constructor函式,同時,這個constructor指標本身就是指向這個函式本身!關於 proto 1.proto 稱為原型鏈 2.js中的所有物...

關於http與https之間的區別

谷歌早在2017年1月發布的chrome 56,開始把要求使用者輸入密碼或信用卡資訊的http網頁標識為 不安全 2017年10月發布的chrome62,開始把需要輸入資料的http網頁和在incognito模式下瀏覽的http 標示為 不安全 http 超文字傳輸協議,是乙個客戶端和伺服器端請求和...