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 伺服器通信模闆。
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 解析庫采用有限狀态機方式解析資料,處理方式更為靈活
一、基礎庫: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
二、應用協定庫: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 中的内部接口
三、功能豐富的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: 調整了構造函數,去掉了最後一個參數