acl 3.0.15 版本 (項目主頁:https://sourceforge.net/projects/acl/,技術文章主頁:http://zsxxsz.iteye.com/)) 發佈了,acl 是 one Advanced C/C++ library 的簡稱,主要包括網絡通訊庫以及服務器框架庫等功能,支持 Linux/Windows/Solaris/FreeBsd/MacOS 平臺;整個 acl 項目主要包含三個函數庫:lib_acl(純C開發的基礎庫,主要包含網絡通訊及服務器編程框架以及其它豐富的功能)、lib_protocol(包含 HTTP/PING/SMTP 通訊協議的C語言實現)、lib_acl_cpp(基於 lib_acl 及 lib_protocol 兩個C庫,提供了更爲強大的編程接口及豐富的功能類);本次 acl 升級除了一些 bug 修復外,主要優化了 ACL 中的網絡服務器框架及網絡通訊庫的性能,此外,修復了一些在 solaris(x86) 上的一些不兼容性問題。node
acl 包括如下豐富的經常使用函數庫:linux
一、常見網絡應用庫: SMTP 客戶端庫/PING 庫/memcache 客戶端庫/handlersocket 客戶端庫/beanstalk 客戶端庫git
二、HTTP 網絡庫:HTTP 客戶端/服務端庫,C++版 HttpServlet 類,HTTP COOKIE/HTTP SESSION 等github
三、郵件解析庫:mime解析庫/RFC2047/RFC2048/mime base64/mime qp/mime uucode 等數據庫
四、網絡通訊庫:阻塞/非阻塞網絡 IO 庫(其中 lib_acl_cpp 庫經過嵌入 polarssl 而具有了 SSL 的能力)編程
五、服務器框架:包括進程池模式、線程池模式、非阻塞模式、UDP通訊模式及觸發器模式json
六、事件引擎:支持 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
.新特性: 完善了 json 流式解析器,提供了更多的功能(如:能夠提取某個結點標籤後的 json 字符串)
.新特性: acl_threads_server.c, 新添加的線程池服務器框架模板
.新特性: acl_threads_server.c 服務器模板增長了配置控制參數 ioctl_batadd, 用來控制是否採用任務添加批處理方式
.新特性: event.c, acl_events.c, 新增長了任務派發前及派發後的回調過程
.新特性: acl_pthread_pool.c, 新增長了 acl_pthread_pool_alloc_job, acl_pthread_pool_free_job, acl_pthread_pool_add_job(新的批量添加線程任務的接口)
.性能優化: acl_pthread_pool.c, 由原來線程池統一用一個線程條件變量改成每一個線程一個單獨的線程條件變量,從而大大減小線程之間的鎖衝突,於是提升了線程池的運行性能
.性能優化: acl_pthread_pool.c, 線程池任務調度優化,將任務分配至每一個線程自己的任務隊列,從而將線程之間的競爭條件降至最低,大大提升了線程池任務調度的性能
.性能優化: acl_pthread_pool.c 線程池任務調度優化,當以批處理方式添加任務時,優先將任務分給空閒線程,減小線程競爭的機率
.問題修復: acl_json_parse.c,json_val() 函數中沒有針對轉義內容作特殊處理
問題修復: 修復了一些 json 解析器中的 bug
問題修復: 線程池服務器模板 (acl_threads_server.c) 應該在 acl_chroot_uid 調用以後再調用 set_core_limit,這樣才能使應用程序崩潰時產生 core 文件
.編譯: 去掉了 ACL_MS_WINDOWS 宏定義,在WINDOWS環境下統一使用 WIN32 來標識 VC 編譯環境
.編譯: 支持 vc2008 編譯器
2、網絡應用協議庫:lib_protocol
.編譯: 在高版本VC(>VC2008) 環境下,使用更爲安全的函數
3、功能豐富的C++庫:lib_acl_cpp
.新特性: master_threads2,新增長了服務器線程池模板
.新特性: socket_stream 類支持 ssl 傳輸(與 polarssl 結合); 去掉了 ssl_stream 類
.新特性: json 類支持將字符串對象添加至數組對象中
.新特性: http_request 類添加了方法 set_timeout 能夠設置網絡超時及讀寫超時
.新特性: 在使用高版本 vc(_MSC_VER >= 1500,即 VC9 以上版本) 編譯器時,再也不使用 _CRT_SECURE_NO_WARNINGS 宏來避免編譯器警告,而是使用 VC 建議的安全函數
.問題修復: json.cpp 中 json_node::set_text 誤把文本值賦予標籤變量
.問題修復: queue_file.cpp,queue_file::create 函數內在嘗試建立文件時可能會由於文件系統出問題而進入循環過程,經過增長標誌位避免該問題
.問題修復: 新線程池服務器模板 master_threads2 類在調用 service_pre_jail 時應該經過 acl_threads_server_event 得到事件引擎 (原來寫的是 acl_ioctl_server_event, 這個是舊的服務器模板獲取事件引擎的方法)
.問題修復: HttpServletRequest.cpp, HttpServletRequest::readHeader 在解析 POST中的數據體時,須要判斷請求頭中 Content-Length 爲 0 的狀況
.示例: samples/json2, 用於測試級聯提取數據的例子
.示例: 將全部的 json 測試用例移至 samples/json 目錄下
.註釋: 修正 connect_manager::init 原來錯誤的參數格式描述
.安全: ipc 通訊機制中增長了隨機數安全驗證功能,以防止外來干擾
參考連接:
技術博客: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