acl 3.0.18 版本 (項目主頁:https://sourceforge.net/projects/acl/,技術文章主頁:http://zsxxsz.iteye.com/)) 發佈了,acl 是 one advanced C/C++ library 的簡稱,主linux
要包括網絡通訊庫以及服務器框架庫等功能,支持 Linux/Windows/Solaris/FreeBsd/MacOS 平臺;整個 acl 項目主要包含三個函數庫:lib_acl(純C開發的基礎庫,主要包含網絡通git
信及服務器編程框架以及其它豐富的功能)、lib_protocol(包含 HTTP/PING/SMTP 通訊協議的C語言實現)、lib_acl_cpp(基於 lib_acl 及 lib_protocol 兩個C庫,提供了更爲強大的github
編程接口及豐富的功能類);本次 acl 升級除了一些 bug 修復外,主要優化了 ACL 中的網絡服務器框架、事件引擎以及線程池調度算法,同時增長了客戶端鏈接分發器模塊。算法
acl 包括如下豐富的經常使用函數庫:數據庫
一、常見網絡應用庫: SMTP 客戶端庫/PING 庫/memcache 客戶端庫/handlersocket 客戶端庫/beanstalk 客戶端庫編程
二、HTTP 網絡庫:HTTP 客戶端/服務端庫,C++版 HttpServlet 類,HTTP COOKIE/HTTP SESSION 等json
三、郵件解析庫:mime解析庫/RFC2047/RFC2048/mime base64/mime qp/mime uucode 等性能優化
四、網絡通訊庫:阻塞/非阻塞網絡 IO 庫(其中 lib_acl_cpp 庫經過嵌入 polarssl 而具有了 SSL 的能力)服務器
五、服務器框架:包括進程池模式、線程池模式、非阻塞模式、UDP通訊模式及觸發器模式網絡
六、事件引擎:支持 select、poll(for unix)、epoll(for linux)、kqueue(for bsd)、devpoll(for solaris)、iocp(for win32)、win32 窗口消息(for win32)事件引擎
七、通用鏈接池庫:高效的鏈接池基礎類庫,支持豐富的功能
八、數據庫客戶端庫:對原生的數據庫客戶端庫進行了二次封裝,使編程更爲簡易,功能更爲豐富
九、xml/json 流式解析庫:區別於網上其它已有的 xml/json 解析庫,acl 中的 xml/json 解析庫採用有限狀態機方式解析數據,處理方式更爲靈活
1、基礎 C 庫:lib_acl
.新特性:線程池中(acl_thread_pool.c)的子線程的等待時間間隔分紅多個等待時間片
.新特性:服務器模板(acl_aio_server.c, acl_thread_server.c)支持向鏈接分發器報告狀態,從而容許從鏈接派發器處接收客戶端鏈接
.新特性:借鑑了 glib 庫中的一些宏定義,針對 gcc 或 vc 編譯器增長了一些編譯屬性開關(如過時 API 調用警告)
.性能優化:線程池調度算法優化(每個線程一個獨立的線程條件變量,從而能夠有效地避免線程池事件通知時的驚羣現象)
.性能優化:事件引擎支持檢測所有套接字的時間間隔設置,當併發鏈接較大時,能夠有效地提高事件檢測的性能
.性能優化:禁用事件引擎中的自旋鎖,下降 CPU 損耗
.問題修復:acl_vstream_net.c 中 acl_vstream_accept_ex 接收外來鏈接時,判斷監聽描述符的類型方式有誤
.問題修復:acl_getpeername 函數當客戶端鏈接的是域套接字時,給出的地址不對
.問題修復:acl_master 服務器模塊在 reload 配置文件時有可能會致使產生 core 文件
.問題修復:events_epoll_thr.c 在函數 event_disable_readwrite 中調用 epoll_ctl 刪除描述字時,也必須保證第四個參數(struct epoll_event*) 非空,不然在低版
本 LINUX 下會有問題
.問題修復:events_iocp.c 關閉未決狀態的完成端口在 WIN XP 下存在 BUG,應該在套接字關閉前先取得完成端口狀態
2、lib_acl_cpp 庫
.新特性:connect_manager 鏈接池集羣管理器增長了後臺檢測功能,新增長的類 connect_monitor 爲一個非阻塞線程,會在後臺按期檢測鏈接池集羣中的全部服務器的端口是否存活
.新特性:借鑑了 glib 庫中的一些宏定義,針對 gcc 或 vc 編譯器增長了一些編譯屬性開關(如過時 API 調用警告)
.新特性:db_pool 類增長了 peek_open 方法,能夠在獲取數據庫對象時直接打開數據庫鏈接
.新特性:將 master_threads 替換爲 master_threads2
.問題修復:md5.cpp 其中在 WIN32 下使用 sprintf_s 函數時,傳入的長度參數應爲 3,不然 VC 會報錯
.問題修復:event_timer.cpp, 在 32 位機下會因 64 位整數轉 32 位整數而致使 32 位整數溢出問題
.問題修復:master_threads/master_threads2 存在內存泄露問題
3、app/master_dispatch: 增長了客戶端鏈接分發器模塊,經過該模塊,能夠很是均勻地將客戶端鏈接分發給使用 acl 服務器框架的應用子進程
參考連接:
技術博客:http://zsxxsz.iteye.com/
download:http://sourceforge.net/projects/acl/
svn:svn checkout svn://svn.code.sf.net/p/acl/code/trunk acl-code
github:https://github.com/zhengshuxin/acl