acl -- 网络及服务器编程框架库 3.0.15 版本发布
acl 3.0.15 版本 (项目主页:https://sourceforge.net/projects/acl/,技术文章主页:http: //zsxxsz.iteye.com/)) 发布了,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 升级除了一些 bug 修复外,主要优化了 ACL 中的网络服务器框架及线程池调度的性能,同时丰富了 json 解析器功能。
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 流式解析器,提供了更多的功能(如:可以提取某个结点标签后的 json 字符串)
.新特性: acl_threads_server.c, 新添加的线程池服务器框架模板
.新特性: acl_threads_server.c 服务器模板增加了配置控制参数 ioctl_batadd, 用来控制是否采用任务添加批处理方式
.新特性: event.c, acl_events.c, 新增加了任务派发前及派发后的回调过程
.新特性: acl_pthread_pool.c, 新增加了 acl_pthread_pool_alloc_job, acl_pthread_pool_free_job, acl_pthread_pool_add_job(新的批量添加线程任务的接口)
.性能优化: acl_pthread_pool.c, 由原来线程池统一用一个线程条件变量改为每个线程一个单独的线程条件变量,从而大大减少线程之间的锁冲突,因而提高了线程池的运行性能
.性能优化: acl_pthread_pool.c, 线程池任务调度优化,将任务分配至每个线程本身的任务队列,从而将线程之间的竞争条件降至最低,大大提高了线程池任务调度的性能
.性能优化: acl_pthread_pool.c 线程池任务调度优化,当以批处理方式添加任务时,优先将任务分给空闲线程,减少线程竞争的概率
.问题修复: acl_json_parse.c,json_val() 函数中没有针对转义内容做特殊处理
问题修复: 修复了一些 json 解析器中的 bug
问题修复: 线程池服务器模板 (acl_threads_server.c) 应该在 acl_chroot_uid 调用之后再调用 set_core_limit,这样才能使应用程序崩溃时产生 core 文件
.编译: 去掉了 ACL_MS_WINDOWS 宏定义,在WINDOWS环境下统一使用 WIN32 来标识 VC 编译环境
.编译: 支持 vc2008 编译器
二、网络应用协议库:lib_protocol
.编译: 在高版本VC(>VC2008) 环境下,使用更为安全的函数
三、功能丰富的C++库:lib_acl_cpp
.新特性: master_threads2,新增加了服务器线程池模板
.新特性: socket_stream 类支持 ssl 传输(与 polarssl 结合); 去掉了 ssl_stream 类
.新特性: json 类支持将字符串对象添加至数组对象中
.新特性: http_request 类添加了方法 set_timeout 可以设置网络超时及读写超时
.新特性: 在使用高版本 vc(_MSC_VER >= 1500,即 VC9 以上版本) 编译器时,不再使用 _CRT_SECURE_NO_WARNINGS 宏来避免编译器警告,而是使用 VC 建议的安全函数
.问题修复: json.cpp 中 json_node::set_text 误把文本值赋予标签变量
.问题修复: queue_file.cpp,queue_file::create 函数内在尝试创建文件时可能会因为文件系统出问题而进入循环过程,通过增加标志位避免该问题
. 问题修复: 新线程池服务器模板 master_threads2 类在调用 service_pre_jail 时应该通过 acl_threads_server_event 获得事件引擎 (原来写的是 acl_ioctl_server_event, 这个是旧的服务器模板获取事件引擎的方法)
.问题修复: HttpServletRequest.cpp, HttpServletRequest::readHeader 在解析 POST中的数据体时,需要判断请求头中 Content-Length 为 0 的情况
.示例: samples/json2, 用于测试级联提取数据的例子
.示例: 将所有的 json 测试用例移至 samples/json 目录下
.注释: 修正 connect_manager::init 原来错误的参数格式描述
.安全: ipc 通信机制中增加了随机数安全验证功能,以防止外来干扰
参考链接:
技术博客: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/zhengshuxin/acl