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之間關於socket程式設計的比較 free my soul ace是乙個很成熟的中介軟體產品,為自適應通訊環境,但它過於巨集大,一堆的設計模式,架構是一層又一層,對初學者來說,有點困難。asio是基本boost開發的非同步io庫,封裝了socket,簡化基於socket程式的開發。...
關於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 超文字傳輸協議,是乙個客戶端和伺服器端請求和...