跨 平台通用網絡通信及伺服器程式設計架構庫 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