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: 调整了构造函数,去掉了最后一个参数