acl 跨平臺網絡通信服務器編程框架 3.0.22 版本發佈

acl 3.0.22 版本發佈了,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 升級的主要內容有:1、SSL 同時支持阻塞、非阻塞模式,2、線程池服務器模板更好地支持在線更新,3、TCP 派發器提供了管理接口用於狀態彙報,4、工程文件整理。
 
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
.新特性:json 模塊增加了構造布爾型和數值型的接口
.新特性:事件引擎模塊可以區分 ACL_EVENT_ACCEPT/ACL_EVENT_CONNECT 與 ACL_EVENT_READ/ACL_EVENT_WRITE 事件類型
.新特性:acl_json_util.c 中增加了流式將 JSON 對象轉爲字符串的函數 acl_json_building,這樣當 JSON 對象比較大時使用該函數可以有效防止要求系統分配非常大的內存空間而導致分配內存失敗
.新特性:acl_pthread_pool.c 中增加了 acl_pthread_pool_idle,
acl_pthread_pool_busy 兩個函數,分別用來獲得當前線程池中的空閒線程數及繁忙線程數
.新特性: acl_threads_server.c 服務器模板當子進程退出時會優先調用應用回調函數,由應用回調函數優先決定是否退出
.新特性:acl_mystring.c 中增加了 acl_find_blank_line 函數,用來從給定數據中查找空行的位置
.新特性:acl_trace.c 中增加了 acl_log_strace() 函數用來將函數調用堆棧輸出至日誌文件中
.新特性:acl_trace.c 中的函數 acl_trace_info 增加了防止遞歸嵌套的功能
.新特性:acl_threads_server.c 當採用 TCP 連接分發方式時,增加了彙報給分發器的信息字段,以便於分發器根據這些字段決定分發的策略
.新特性:acl_vstream.c 中循環寫函數(loop_writen)支持超時寫功能
.新特性:acl_msg.c 中的 acl_msg_error/warn/fatal/panic 支持記錄函數調用堆棧

.性能:acl_vstream.c 優化了讀 (__sys_read) 的性能

.問題修復: acl_json_util.c 中將 JSON 對象轉爲字符串的函數 acl_json_build
不能支持某些情形
.問題修復:acl_json_util.c 中的函數 json_escape_append 不應針對字符 '/' 進行轉義
.問題修復:acl_vstream.c 在寫時有可能會造成死循環
.問題修復:acl_vstream.c 中函數 __sys_read 的標誌位 sys_read_ready 置 0 應該在 read_fn/fread_fn 函數返回後
.問題修改:acl_aio_read.c 中的 reactor IO 方式的函數 acl_aio_enable_read 內部在某種情況下有可能不會觸發讀回調過程
.問題修復:acl_sys_socket.c 中的讀/寫超時參數 timeout 不起作用
.問題修復:acl_threads_server.c/acl_aio_server.c 服務器模板,當採用 TCP 分發方式時,如果 acl_master reload 後若子進程配置的不是立即退出,則該子進程會重試連接 TCP 派發器從而導致該子進程永不會退出
.問題修復:snprintf.c 中 acl_secure_snprintf/acl_secure_vsnprintf 在調用 _vsnprintf_s 時有誤,第三個參數需傳入 _TRUNCATE,否則當緩衝區較小時會產生斷言
.問題修復:acl_threads_server.c 將對客戶端 IP 地址訪問權限的處理過程放在 client_wakeup 中,否則會造成 master_threads2 類產生 core

.其它:整理庫的所有頭文件,使之更規範

二、lib_protocol 庫
.問題修復: http_hdr_req.c 中的函數  __strip_url_path 仍然存在問題,因爲輸入的兩個參數有可能指向相同的內存地址,從而導致第二個參數被賦 '\0',所以應該把 ACL_VSTRING_RESET/ACL_VSTRING_TERMINATE 放在 acl_argv_split 之後
.問題修復:http_hdr_req.c 中當重複使用線程局部變量時調用 __hdr_reset 來重置其中的一些參數,雖然調用了 ACL_VSTRING_RESET,但該宏並不會將緩衝數據尾部置 0,導致舊的數據會被重複使用
問題修復: proto_snprintf.c 中函數 proto_secure_snprintf/proto_securevsnprintf 在調用 _vsnprintf_s 時第三個參數應該爲 _TRUNCATE,否則當緩衝區給的比較小時VC提供的 API 內部會產生斷言

三、lib_acl_cpp 庫
.新特性:locker 類增加了 try_lock 方法
.新特性:xml 類增加了幾個方法
.新特性:json 類增加了構造布爾型和數值型的接口
.新特性:stream_setup 類現在可以支持 aio_stream 非阻塞流了
.新特性:polarssl_io 類增加了支持非阻塞 IO 的方法
.新特性:string 類增加了 find_blank_line/find_reset 方法,用來方便從當前緩衝區中查找一個空行的位置
.新特性:string 類增加了 substr 方法,用來從當前緩衝區中提取數據
.新特性:master_threads2 類增加了 proc_exit_timer 虛函數,當子進程需要退出時服務器模板將會回調該虛函數以決定子進程是否可以退出
.新特性:master_threads2 類增加了 thread_on_handshake 方法,當服務端調用完 thread_on_accept 後可以在子線程中調用 thread_on_handshake 方法,以處理較長的任務

.問題修復:snprintf.cpp 中函數 snprintf/vsnprintf 在調用 _vsnprintf_s 時第三個參數應該爲 _TRUNCATE,否則當緩衝區給的比較小時VC提供的 API 內部會產生斷言
.問題修復:fstream::open 方法在打開文件時先調用基類 stream::open_stream,然後基類函數再調用 C 庫 acl_vstream_fdopen 時沒有說明打開流的類型,導致內部流對象 ACL_VSTREAM 的關閉回調函數設置有誤
.問題修復:http_response 類中當調用 read_header 方法時,需要自動將 head_sent_ 置爲 false,以便於同一連接的下一次會話時可以正確發送 HTTP 響應頭
.問題修復:istream 類中的 xxx_peek 函數在讀出錯時沒有判斷 errno 爲 ACL_EWOULDBLOCK 的情況,在非阻塞方式下,當讀返回 -1 且 errno 爲 ACL_EWOULDBLOCK 時並不表示讀出錯
.問題修復:polarssl_io 類在非阻塞模式下有可能會阻塞在 IO 上

.新示例:增加了 json 測試用例 json/json7
.新示例:新 string/blank_line 示例,用來測試上面新增的方法

四、參考鏈接:
技術博客: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/acl-dev/acl
QQ 羣:242722074

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