開源網絡庫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端單向的推送數據流。linux

相關文章
相關標籤/搜索