网络与服务器编程框架库 acl_3.0.12 发布
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
acl 3.0.12 版本 (項目主頁:https://sourceforge.net/projects/acl/, ?技術文章主頁:http://zsxxsz.ietye.com/) 發(fā)布了,acl 是 one Advanced C/C++ library 的簡稱,主要包括網(wǎng)絡通信庫以及服務器框架庫等功能,支持 Linux/Windows 平臺;整個 acl 項目主要包含三個函數(shù)庫:lib_acl(純C開發(fā)的最基礎庫,主要包含網(wǎng)絡通信及服務器編程框架以及其它豐富的功能)、lib_protocol(包含 HTTP/PING/SMTP 通信協(xié)議的C語言實現(xiàn))、lib_acl_cpp(基于 lib_acl 及 lib_protocol 兩個C庫,提供了更為強大的編程接口及豐富的功能類);本次 acl 升級除了一些常見 bug 修復外,主要針對 ACL 的通信模塊增加了 UDP 的通信能力,同時增加了 UDP 服務器通信模板。
?
acl 包括以下豐富的常用函數(shù)庫:
1、常見網(wǎng)絡應用庫: SMTP 客戶端庫/PING 庫/memcache 客戶端庫/handlersocket 客戶端庫/beanstalk 客戶端庫
2、HTTP 網(wǎng)絡庫:HTTP 客戶端/服務端庫,C++版 HttpServlet 類,HTTP COOKIE/HTTP SESSION 等
3、郵件解析庫:mime解析庫/RFC2047/RFC2048/mime base64/mime qp/mime uucode 等
4、網(wǎng)絡通信庫:阻塞/非阻塞網(wǎng)絡 IO 庫(其中 lib_acl_cpp 庫通過嵌入 polarssl 而具備了 SSL 的能力)
5、服務器框架:包括進程池模式、線程池模式、非阻塞模式、UDP通信模式及觸發(fā)器模式
6、事件引擎:支持 select、poll(for unix)、epoll(for linux)、kqueue(for bsd)、devpoll(for solaris)、iocp(for win32)、win32 窗口消息(for win32)事件引擎
7、通用連接池庫:高效的連接池基礎類庫,支持豐富的功能
8、數(shù)據(jù)庫客戶端庫:對原生的數(shù)據(jù)庫客戶端庫進行了二次封裝,使編程更為簡易,功能更為豐富
9、xml/json 流式解析庫:區(qū)別于網(wǎng)上其它已有的 xml/json 解析庫,acl 中的 xml/json 解析庫采用有限狀態(tài)機方式解析數(shù)據(jù),處理方式更為靈活
?
一、基礎庫:lib_acl
. feature: acl_single_server.c, acl_ioctl_server.c, acl_aio_server.c, acl_udp_server.c 增加了可以獲得本地監(jiān)聽套接口流對象集合的函數(shù)
. feature: master 服務器框架增加了專門針對 UDP 的服務器模板 acl_udp_server.c/acl_udp_params.h
. feature: ACL_VSTREAM 支持 UDP 傳輸; acl_vstream_net.c 中增加了 acl_vstream_bind 函數(shù)用來綁定 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 三個函數(shù)
. performance: ACL_VSTREAM 中將 remote_addr, local_addr 定義為指針,從而大大減少了 ACL_VSTREAM 對象創(chuàng)建時的尺寸大小
. compile: 增加了工程文件 Makefile.db,使用該工程文件編譯,則可以使用 mysql 數(shù)據(jù)庫功能,使用 Makefile 工程文件編譯,則可以 lib_acl.a 更為干凈 (即不依賴于任何第三方庫)
. bugfix: events_select.c/events_select_thr.c 當套接字監(jiān)聽集合為空時休眠的時間單位為秒,需要將微秒級的 delay 轉(zhuǎn)為秒級
. other: events 模塊 ACL_EVENT_NOTIFY_RDWR/ACL_EVENT_NOTIFY_TIME 函數(shù)接口類型重新定義,在回調(diào)函數(shù)中增加了 ACL_EVENT,ACL_VSTREAM 參數(shù),從而方便用戶直接使用;因為這兩個接口的重新定義,導致了很多功能模塊做相應修改,主要影響的模塊有:event, master, aio, ioctl
. other: 將 master 模塊下的源文件代碼排版整理了一下
. other: acl_vstream.c: acl_vstream_set_remote 重命名為 acl_vstream_set_peer
?
二、應用協(xié)議庫:lib_protocol
. bugfix: http_chat_async.c 中 http_res_body_get_async/http_req_body_get_async 兩個函數(shù)沒有對 ctx->read_cnt 置 0
. other: lib_acl 庫中 ACL_EVENT_NOTIFY_RDWR/ACL_EVENT_NOTIFY_TIME 函數(shù)接口定義的修改,與之相關的模塊(icmp)進行了修改
. other: 因為 lib_acl 基礎庫中的 ACL_VSTREAM 讀寫回調(diào)函數(shù)接口變更,調(diào)整了與之相關的部分內(nèi)部接口,主要影響到了 icmp 模塊中 icmp_stream.c 中的內(nèi)部接口
?
三、功能豐富的C++庫:lib_acl_cpp
. feature: aio_stream 增加了 get_peer/get_local 用來獲得網(wǎng)絡連接流的本地及遠程地址
. feature: master_udp 服務器模板增加了可在 proc_on_init() 虛函數(shù)中獲得本地綁定套接字流對象集合的函數(shù)功能: get_sstreams()
. feature: master 服務器框架增加了 master_udp 服務模板類
. feature: connect_manager 類增加了根據(jù)鍵值字符串的哈希值獲取連接池對象的虛函數(shù),從而有利于在分布式環(huán)境里使用連接池
. feature: connect_manager/connect_pool 類增加了針對每個連接池有一個其位于連接池集合中的下標索引
. feature: http_request::request 中原來只能指定 GET/POST 兩種請求方法,現(xiàn)在可以指定多種請求方法
. feature: http_header 允許設置自定義 (即除 GET/POST/PUT/CONNECT/PURGE之個) 的請求頭命令字
. feature: memcache 類支持流式讀寫數(shù)據(jù),從而可以支持大 value 的存取方式
. feature: master_threads 類在單獨運行方式的使用場景接近于在 acl_master 框架下的運行場景
. feature: master_threads/master_aio/master_proc 類支持在單獨運行模式下監(jiān)聽多個地址
. feature: acl_cpp_init.cpp 中添加了 WIN32 下關閉 DOS 窗口的函數(shù)
. feature: http/memcache 模塊增加了連接池管理類
. compile: acl_cpp_init.cpp 中 freopen 返回的文件句柄因為未被使用而使編譯器報警
. compile: 增加了 Makefile.db 工程文件,使用該文件編譯則需要 mysql/sqlite 庫; 如果不需要數(shù)據(jù)庫相關的功能,則使用 Makefile 工程文件進行編譯
. bugfix: memcache 類中當連接異常中斷重試時會因請求數(shù)據(jù)被清掉而出錯,原因是請求與響應共用同一個緩沖區(qū)所致,現(xiàn)將請求緩沖區(qū)與響應緩沖區(qū)分開
. bugfix: memcache.cpp 當調(diào)用 open 函數(shù)連接 memcached 服務器失敗時,用 valgrind 檢查出記錄錯誤日志時引用了一個未經(jīng)初始化的變量
. samples: 增加了針對 UDP 的測試用例 udp_client?
. other: lib_acl 庫中 ACL_EVENT_NOTIFY_RDWR/ACL_EVENT_NOTIFY_TIME 函數(shù)接口定義的修改,與之相關的模塊進行了修改
. other: 因為 lib_acl 基礎庫中的 ACL_VSTREAM 讀寫回調(diào)函數(shù)接口變更,調(diào)整了與之相關的部分內(nèi)部接口,主要影響到了 ssl_stream/ssl_aio_stream
. other: connpool/http_request_pool/memcache_pool: 調(diào)整了構(gòu)造函數(shù),去掉了最后一個參數(shù)
轉(zhuǎn)載于:https://my.oschina.net/u/568966/blog/309568
總結(jié)
以上是生活随笔為你收集整理的网络与服务器编程框架库 acl_3.0.12 发布的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 停用nfs导致cacti无法抓取snmp
- 下一篇: 限制USB延迟启动