開源網絡庫ACE、Boost的ASIO、libevent、libev、ZeroMQ


開源C/C++網絡庫:
ACE          C++語言 跨平台
Boost的ASIO  C++語言 跨平台
libevent     C語言   主要支持linux,新版增加了對windows的IOCP的支持
libev        C語言   只支持linux,只封裝了EPOLL模型


層次架構:
ACE:底層是OS適配層,上一層C++的wrap類,再上一層框架(Accpetor,Connector,Reactor,Proactor等),再上一層框架上的服務。
Boost的ASIO:底層是OS適配層,上一層一些模板類,再上一層模板類的參數化(TCP/UDP),再上一層是服務,它只有一種框架io_service。
libevent :libevent在不同OS下,做了多路復用模型的抽象,可以選擇不同的模型,通過事件函數提供服務。


涉及范圍:
ACE:ACE包含了日志,IPC,線程池,共享內存,配置服務,遞歸鎖,定時器等。
Boost的ASIO:ASIO只涉及到Socket,提供簡單的線程操作。
libevent :libevent只提供了簡單的網絡API的封裝, 線程池, 內存池, 遞歸鎖等均需要自己實現。


開發難度:
ACE:ACE難度較大,必須了解其框架
Boost的ASIO:難度適中要求熟悉boost庫中的boost::bind,內存管理等
libevent :相對容易

發布方式:
ACE:ACE不依賴第3方庫,以DLL方式提供
Boost的ASIO:依賴Boost,使用時只要include頭文件,不需要動態庫
libevent :一遍編譯為靜態庫使用


線程調用:
ACE:ACE Reactor是單線程調度,Proactor支持多線程調度。
Boost的ASIO:支持單線程和多線程調度。
libevent :線程調度需要自己來注冊不同的時間句柄。


事件分派處理:
ACE:ACE注冊handler類,事件分派時,調用其handler的虛掛鈎函數,實現ACE_Handler/ACE_Svc_Handler/ACE_Event_handler等類的虛函數。
Boost的ASIO:基於函數對象的hanlder事件分派。任何函數都有可能成為hanlder,少了一堆虛表的維護,調度優於ACE。
libevent :基於注冊的事件回調函數來實現事件分發


設計模式:
ACE:ACE 主要應用了Reactor("信號驅動IO"),Proactor(異步IO)
Boost的ASIO:Proactor
libevent :Reactor


http://wanglimin2004.blog.163.com/blog/static/115488498201271611723476/


ZeroMQ:

普通socket是端到端,ZeroMQ卻可以N:M的關系
3中通訊模式:
  請求回應模型,請求段發起請求,等待回應端回應請求。 請求端與回應端是1:N的,可以擴展成N:M的。
  發布訂閱模型,發布端單向發送數據,不關心信息是否都發送給了訂閱端。訂閱端只負責接收,不反饋。若交互,需要額外的socket采用請求回應模型實現。
  管道模型,管道是單向的,從PUSH端單向的向PULL端單向的推送數據流。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM