acl 3.0.12 版本 (項目主頁:https://sourceforge.net/projects/acl/, 技術文章主頁:http://zsxxsz.ietye.com/) 發佈了,acl 是 one Advanced C/C++ library 的簡稱,主要包括網絡通訊庫以及服務器框架庫等功能,支持 Linux/Windows 平臺;整個 acl 項目主要包含三個函數庫:lib_acl(純C開發的最基礎庫,主要包含網絡通訊及服務器編程框架以及其它豐富的功能)、lib_protocol(包含 HTTP/PING/SMTP 通訊協議的C語言實現)、lib_acl_cpp(基於 lib_acl 及 lib_protocol 兩個C庫,提供了更爲強大的編程接口及豐富的功能類);本次 acl 升級除了一些常見 bug 修復外,主要針對 ACL 的通訊模塊增長了 UDP 的通訊能力,同時增長了 UDP 服務器通訊模板。mysql
acl 包括如下豐富的經常使用函數庫:linux
一、常見網絡應用庫: SMTP 客戶端庫/PING 庫/memcache 客戶端庫/handlersocket 客戶端庫/beanstalk 客戶端庫sql
二、HTTP 網絡庫:HTTP 客戶端/服務端庫,C++版 HttpServlet 類,HTTP COOKIE/HTTP SESSION 等數據庫
三、郵件解析庫:mime解析庫/RFC2047/RFC2048/mime base64/mime qp/mime uucode 等編程
四、網絡通訊庫:阻塞/非阻塞網絡 IO 庫(其中 lib_acl_cpp 庫經過嵌入 polarssl 而具有了 SSL 的能力)json
五、服務器框架:包括進程池模式、線程池模式、非阻塞模式、UDP通訊模式及觸發器模式服務器
六、事件引擎:支持 select、poll(for unix)、epoll(for linux)、kqueue(for bsd)、devpoll(for solaris)、iocp(for win32)、win32 窗口消息(for win32)事件引擎網絡
七、通用鏈接池庫:高效的鏈接池基礎類庫,支持豐富的功能框架
八、數據庫客戶端庫:對原生的數據庫客戶端庫進行了二次封裝,使編程更爲簡易,功能更爲豐富socket
九、xml/json 流式解析庫:區別於網上其它已有的 xml/json 解析庫,acl 中的 xml/json 解析庫採用有限狀態機方式解析數據,處理方式更爲靈活
1、基礎庫:lib_acl
. feature: acl_single_server.c, acl_ioctl_server.c, acl_aio_server.c, acl_udp_server.c 增長了能夠得到本地監聽套接口流對象集合的函數
. feature: master 服務器框架增長了專門針對 UDP 的服務器模板 acl_udp_server.c/acl_udp_params.h
. feature: ACL_VSTREAM 支持 UDP 傳輸; acl_vstream_net.c 中增長了 acl_vstream_bind 函數用來綁定 UDP 傳輸模式
. feature: ACL_VSTREAM 增長了 acl_vstream_set_local_addr, acl_vstream_set_peer_addr
. feature: ACL_VSTREAM 中添加了 struct sockaddr_in 類型的兩個指針,以便於 ACL_VSTREAM 很容易支持 UDP 傳輸
. feature: ACL_VSTREAM 對象增長了 acl_vstream_set_local, acl_vstream_set_remote, acl_vstream_set_path 三個函數
. performance: ACL_VSTREAM 中將 remote_addr, local_addr 定義爲指針,從而大大減小了 ACL_VSTREAM 對象建立時的尺寸大小
. compile: 增長了工程文件 Makefile.db,使用該工程文件編譯,則可使用 mysql 數據庫功能,使用 Makefile 工程文件編譯,則能夠 lib_acl.a 更爲乾淨 (即不依賴於任何第三方庫)
. bugfix: events_select.c/events_select_thr.c 當套接字監聽集合爲空時休眠的時間單位爲秒,須要將微秒級的 delay 轉爲秒級
. other: events 模塊 ACL_EVENT_NOTIFY_RDWR/ACL_EVENT_NOTIFY_TIME 函數接口類型從新定義,在回調函數中增長了 ACL_EVENT,ACL_VSTREAM 參數,從而方便用戶直接使用;由於這兩個接口的從新定義,致使了不少功能模塊作相應修改,主要影響的模塊有:event, master, aio, ioctl
. other: 將 master 模塊下的源文件代碼排版整理了一下
. other: acl_vstream.c: acl_vstream_set_remote 重命名爲 acl_vstream_set_peer
2、應用協議庫:lib_protocol
. bugfix: http_chat_async.c 中 http_res_body_get_async/http_req_body_get_async 兩個函數沒有對 ctx->read_cnt 置 0
. other: lib_acl 庫中 ACL_EVENT_NOTIFY_RDWR/ACL_EVENT_NOTIFY_TIME 函數接口定義的修改,與之相關的模塊(icmp)進行了修改
. other: 由於 lib_acl 基礎庫中的 ACL_VSTREAM 讀寫回調函數接口變動,調整了與之相關的部份內部接口,主要影響到了 icmp 模塊中 icmp_stream.c 中的內部接口
3、功能豐富的C++庫:lib_acl_cpp
. feature: aio_stream 增長了 get_peer/get_local 用來得到網絡鏈接流的本地及遠程地址
. feature: master_udp 服務器模板增長了可在 proc_on_init() 虛函數中得到本地綁定套接字流對象集合的函數功能: get_sstreams()
. feature: master 服務器框架增長了 master_udp 服務模板類
. feature: connect_manager 類增長了根據鍵值字符串的哈希值獲取鏈接池對象的虛函數,從而有利於在分佈式環境裏使用鏈接池
. feature: connect_manager/connect_pool 類增長了針對每一個鏈接池有一個其位於鏈接池集合中的下標索引
. feature: http_request::request 中原來只能指定 GET/POST 兩種請求方法,如今能夠指定多種請求方法
. feature: http_header 容許設置自定義 (即除 GET/POST/PUT/CONNECT/PURGE之個) 的請求頭命令字
. feature: memcache 類支持流式讀寫數據,從而能夠支持大 value 的存取方式
. feature: master_threads 類在單獨運行方式的使用場景接近於在 acl_master 框架下的運行場景
. feature: master_threads/master_aio/master_proc 類支持在單獨運行模式下監聽多個地址
. feature: acl_cpp_init.cpp 中添加了 WIN32 下關閉 DOS 窗口的函數
. feature: http/memcache 模塊增長了鏈接池管理類
. compile: acl_cpp_init.cpp 中 freopen 返回的文件句柄由於未被使用而使編譯器報警
. compile: 增長了 Makefile.db 工程文件,使用該文件編譯則須要 mysql/sqlite 庫; 若是不須要數據庫相關的功能,則使用 Makefile 工程文件進行編譯
. bugfix: memcache 類中當鏈接異常中斷重試時會因請求數據被清掉而出錯,緣由是請求與響應共用同一個緩衝區所致,現將請求緩衝區與響應緩衝區分開
. bugfix: memcache.cpp 當調用 open 函數鏈接 memcached 服務器失敗時,用 valgrind 檢查出記錄錯誤日誌時引用了一個未經初始化的變量
. samples: 增長了針對 UDP 的測試用例 udp_client
. other: lib_acl 庫中 ACL_EVENT_NOTIFY_RDWR/ACL_EVENT_NOTIFY_TIME 函數接口定義的修改,與之相關的模塊進行了修改
. other: 由於 lib_acl 基礎庫中的 ACL_VSTREAM 讀寫回調函數接口變動,調整了與之相關的部份內部接口,主要影響到了 ssl_stream/ssl_aio_stream
. other: connpool/http_request_pool/memcache_pool: 調整了構造函數,去掉了最後一個參數