跨平臺的網絡通信與服務器框架庫 acl 庫 3.0.20版本發佈

跨 平臺通用網絡通信及服務器編程框架庫 acl 庫之 3.0.20 版本 (項目主頁:https://sourceforge.net/projects/acl/,https://github.com /zhengshuxin/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 包括以下豐富的常用函數庫:
    1、常見網絡應用庫: SMTP 客戶端庫/PING 庫/memcache 客戶端庫/handlersocket 客戶端庫/beanstalk 客戶端庫
    2、HTTP 網絡庫:HTTP 客戶端/服務端庫,C++版 HttpServlet 類,HTTP COOKIE/HTTP SESSION 等
    3、郵件解析庫:mime解析庫/RFC2047/RFC2048/mime base64/mime qp/mime uucode 等
    4、網絡通信庫:阻塞/非阻塞網絡 IO 庫(其中 lib_acl_cpp 庫通過嵌入 polarssl 而具備了 SSL 的能力)
    5、服務器框架:包括進程池模式、線程池模式、非阻塞模式、UDP通信模式及觸發器模式
    6、事件引擎:支持 select、poll(for unix)、epoll(for linux)、kqueue(for bsd)、devpoll(for solaris)、iocp(for win32)、win32 窗口消息(for win32)事件引擎
    7、通用連接池庫:高效的連接池基礎類庫,支持豐富的功能
    8、數據庫客戶端庫:對原生的數據庫客戶端庫進行了二次封裝,使編程更爲簡易,功能更爲豐富
    9、xml/json 流式解析庫:區別於網上其它已有的 xml/json 解析庫,acl 中的 xml/json 解析庫採用有限狀態機方式解析數據,處理方式更爲靈活

一、基礎 C 庫:lib_acl
1) 新特性:feature: ACL_VSTREAM 增加了 objs_table 成員用來存放 KEY-OBJECT 對象, 可以通過 acl_vstream_add_object/acl_vstream_get_object/acl_vstream_del_object 來操作
2) 新特性:acl_vstream.c 中 acl_vstream_gets_peek/acl_vstream_gets_nonl_peek 增加了行長度限制功能,當緩衝區 buf->maxlen > 0 時,該限制將會生效,這可以避免客戶端通過發送一行特別長的數據而造成本地內存溢出
3) 新特性:acl_aio_read.c 中增加了針對讀行數據的最大長度限制
4) 問題修復:acl_tmpl.c 移到 stdlib/sys/unix/acl_core_limit.c 452.2) bugfix: acl_basename.c 中的 acl_safe_basename() 函數有 BUG
5) 其它:acl_set_ugid.c/acl_set_eugid.c: 當進程不能切換用戶身份時取消了自動 fatal 的過程,而是給上一級調用者返回 -1 表示切換用戶身份失敗

二、lib_protocol 庫
1) 問題修復:http_hdr_req.c 中當重複使用線程局部變量時調用 __hdr_reset 來重置其中的一些參數,雖然調用了 ACL_VSTRING_RESET,但該宏並不會將緩衝數據尾部置 0,導致舊的數據會被重複使用
 
三、lib_acl_cpp 庫
1) 新特性:string.cpp 類 string 支持左值賦值重載;string 類支持設定緩衝區最大長度,當超過此長度時會報警告
2) 新特性:調用 string 類的左值賦值函數後,可以通過 length() 取得數據緩衝區的長度同時會將多餘空間填充爲 \0 以保證使用時的安全性,這一點與 std::string 有所不同,std::string 返回 0 且也不會填充多餘空間數據
3) 新特性:istream 類支持按行讀數據時限制行數據最大長度以防止 本地緩衝區溢出
4) 新特性:http_mime.cpp 還未分析 HTTP MIME 數據時若用戶調用 get_nodes,則內部不會設置 parsed_ 爲 true 且會返回空結合集合
5) 新特性:http_request.cpp 中調用方法 write_head 時,若請求方法爲 POST 方法,則增加了有效的重試機制
6) 新特性:stream 類擴展了 set_ctx/get_ctx 方法,可以通過 key 設置/查找其對應的 ctx 對象,同時增加了 del_ctx 方法用來刪除 key 對應的 ctx 對象
7) 新特性:socket_stream 類增加了 alive() 方法用來檢測網絡連接的存活態
8) 新特性:stream 類的 set_ctx 方法增加是否允許覆蓋舊對象的功能
9) 新特性:支持使用 polarssl 庫進行 SSL 服務端傳輸
10) 新特性: 支持 polarssl.1.2.11 和 polarssl.1.3.8 兩個版本的 polarssl
11) 問題修復:header_token.cpp 的函數 header_token 當分析 WIN32 的路徑時存在問題,會過濾掉路徑中的反斜槓 '\'
12) 新示例:增加了 socket/client, socket/server 兩個網絡測試用例,用來測試網絡關閉時第一次寫依然會成功的情況
13) 新示例:string3 示例專門用來測試 string 類進行左值賦值的情況
14) 新示例:samples/ssl_server 新增的服務端 SSL 示例
15) 新示例:增加了 samples/https_client 多線程測試示例,用來測試https_server 服務器

參考鏈接:
技術博客:http://zsxxsz.iteye.com/
download:http://sourceforge.net/projects/acl/
svn: svn://svn.code.sf.net/p/acl/code/trunk
github:https://github.com/acl-dev/acl
QQ 羣:242722074

 

發佈了13 篇原創文章 · 獲贊 1 · 訪問量 3858
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章