acl 3.1.4 版本发布了,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 升级的主要内容有:完善并丰富的 dbuf(内存池)模块,并在 acl 的多个模块中使用,增加了撰写邮件模块类,增加了基于内存映射的 xml 解析器;修改一些 BUG 问题,同时增加了一些功能点。
acl 包括以下丰富的常用函数库:
1、服务器框架:包括进程池模式、线程池模式、非阻塞模式、UDP通信模式及触发器模式
2、网络通信库:阻塞/非阻塞网络 IO 库(其中 lib_acl_cpp 库通过嵌入 polarssl 而具备了 SSL 通信能力)
3、HTTP 网络库:HTTP 客户端/服务端库,HTTP 服务端支持 HttpServlet 接口访问方式;支持 HTTP cookies/session;HTTP 客户端支持连接池及连接池集群
4、redis 客户端库:实现了 redis 客户端命令中 12 个大类中的总共 150 多个命令,支持连接池及集群连接池方式
5、常见网络应用库: SMTP 客户端库/PING 库/DNS 解析库/memcache 客户端库/handler socket 客户端库/beanstalk 客户端库/disque 客户端库
6、邮件解析库:mime解析库/RFC2047/RFC2048/mime base64/mime qp/mime uucode 等
7、事件引擎:支持 select、poll(for unix)、epoll(for linux)、kqueue(for bsd)、devpoll(for solaris)、iocp(for win32)、win32 窗口消息(for win32)事件引擎
8、通用连接池库:高效的连接池基础类库,支持丰富的功能
9、数据库客户端库:对原生的数据库客户端库进行了二次封装,使编程更为简易,功能更为丰富,支持连接池及连接池集群管理功能
10、xml/json 流式解析库:区别于网上其它已有的 xml/json 解析库,acl 中的 xml/json 解析库采用有限状态机方式解析数据,处理方式更为灵活
一、基础 C 库:lib_acl
.新特性:json 解析器增加支持判断是否解析完毕的功能
.新特性:json 解析器支持最外层为数组类型,同时完全支持:bool, number, null 类型的数据
.新特性:json 解析器增加了函数 acl_json_getFirstElementByTagName
.新特性:acl_dbuf_pool.c 中的 acl_dbuf_pool_reset 函数在重置内存池时支持保留指定长度的缓冲区
.新特性:增加了 acl_dbuf_pool_free, acl_dbuf_pool_keep, acl_dbuf_pool_unkeep 三个函数,同时优化 acl_dbuf_pool_reset 函数,当某个内存块有标识为保留的内存段时并不会释放
.新特性:acl_dbuf_pool.c 在调用 acl_dbuf_pool_free 时可以有效地释放掉大内存,这样在 acl_vstring.c 中在进行大内存扩充时可以有效地将大内存优先释放掉
.新特性:acl_urlcode.c 中引用了 ACL_DBUF_POOL 内存池
.新特性:acl_htable.c 中新增函数 acl_htable_delete_entry
.新特性:acl_array.c, acl_xml.c 引入了 ACL_DBUF_POOL,从而提升了性能
.新特性:增加新的 xml 编解码函数,其中的参数指定输出缓冲区大小
.新特性:acl_xml_parse.c 支持解析有多个或单个 xml 根节点的 xml 文档
.新特性:acl_xml2 增加了将 xml 对象转换为字符串的功能
.新特性:新增 xml 解析器 acl_xml3,该解析器性能与 RapidXML(号称世界上最快的)解析器的性能几乎相当
.新特性:acl_xml2 解析器支持文件空间大小自动扩充方式
.新特性:acl_xml2 解析器新增接口 acl_xml2_mmap_alloc,方便以内存文件映射方式对 xml 文件进行解析和创建
.新特性:acl_xml_parse.c / acl_xml2_parse.c 可以解析 CDATA
.问题修复:acl_atoui64/acl_atoi64 在 WINDOWS 平台使用 VC2012 编译时有问题,因为内部所用的 VC 提供的 API _atoi64 有问题,当转换最大的 64 位整数(18446744073709551615)
.问题修复:acl_json_parse.c 针对 -xxx 或 +xxx 也应识别为数值类型
.问题修复:acl_xml_util.c 中 acl_xml_build 进行 xml 特殊字符转义时有误
.问题修复:acl_dbuf_pool.c 中在调用 acl_dbuf_pool_reset 时在遇到保留内存块时应该保留整个内存块,且偏移地址保持不变
.问题修复:acl_vstream.c 中的函数 sys_read 中必须在调用 fread_fn/read_fn 前清除可读标志位,这样 IO 钩子函数在重置该标志位时才能生效
.问题修复:将清除 ACL_VSTREAM::sys_read_ready 标志位的操作从 acl_vstream.c 的函数 sys_read 中移除,在 acl_sys_socket.c 的函数 acl_socket_read 进行清除该标志位
.问题修复:acl_xml.c/acl_xml2.c/acl_xml3.c 在删除节点时在在残留问题
.问题修复:acl_vstream.c 中当 read/write 接口被注入时,因为没有对应的 writev 注入方式,所以需要多次调用 write 来模拟 writev 过程
.问题修复:acl_sys_socket.c 的函数 acl_socket_read 中没有清除流对象的系统可读标志位, 可能会造成读阻塞或异步读时的死循环
.问题修复:acl_aio_write.c 的函数 acl_aio_writen 中在一处返回时未将嵌套层级减一,可能会阻塞写过程
.性能:acl_xml_util.c 中的函数 acl_xml_create_node 在创建节点时,如果正文内容比较大,则会因内存的快速频繁膨胀而造成性能损耗,现在采用了预分配策略,以减少这种性能损耗
.性能:acl_xmlcode.c 中的函数 acl_xml_encode/acl_xml_decode 通过
提前预分配内存,以减少重复分配/释放内存的次数,从而在一定程度上提升内存操作性能
.性能:events.c, events_kernel.c, events_iocp.c, 在每一个事件循环处理完毕时,如果依然有一些描述字的缓冲区还有数据,则立即触发下一个事件循环过程,从而保证了 IO 读的处理效率
二、lib_protocol 库
.问题修复: http_hdr_res.c/http_hdr_req.c 中有可能会因为 main_cache_free 的调用在 http_hdr_res_free/http_hdr_req_free 之前调用而造成内存冲突
三、lib_acl_cpp 库
.新特性:locker 互斥类增加了 lock_guard 类以便于简化加锁/解锁操作
.新特性:添加 smtp_client 类用来发送电子邮件,同时支持 SSL 方式发送邮件
.新特性:smtp 模块增加了邮件合成的功能
.新特性:connect_pool/connect_manager 连接池及连接池管理类允许设置无连接数上限
.新特性:json 解析器增加支持判断是否解析完毕的功能
.新特性:json_node 类增加了节点类型的判断方法
.新特性:json 类添加了新方法 getFirstElementByTagName
.新特性:json 类增加了重载运行符[]接口,方便用户获得第一个匹配对象
.新特性:http 模块中的 HttpServlet 类增加了 doOther 虚接口,从而可以支持其它未知的 HTTP 请求方法
.新特性:string 类中的方法 strip 采用写时拷贝技术
.新特性:string 类增加了方法 equal 用来比较两个 string 对象里的内容
.新特性:redis_client_cluster/redis_client_pool/redis_client 支持连接成功后使用连接密码进行身份验证,从而使 redis 的集群模块支持密码验证功能
.新特性:url_coder 类内部采用 dbuf_pool 内存对象进行分配管理
.新特性:dbuf_pool 类重载的 new 允许调用者指定所分配的内存块的倍数
.新特性:dbuf_pool.cpp 中增加了内存池管理类 dbuf_guard 及内存池对象类 dbuf_obj,以方便使用 dbuf_pool 内存池
.新特性:dbuf_obj 类增加了 nrefer_,便于 dbuf_guard 进行安全管理,以防止被 dbug_guard 类对象重复释放
.新特性:dbuf_guard 类增加了更多方便操作的方法,同时使数组对象也在内存池对象上创建
.新特性:dbuf_guard 类增加了模板函数 create,可更加方便地创建任何继承于 dbuf_obj 的子类对象
.新特性:url_coder 类继承于 dbuf_obj 从而纳入 dbuf_guard 管理
.新特性:连接池模块简化接口设计,允许连接集群管理器在添加新的连接池时设置超时时间,从而使连接池集群管理器针对不同的服务器地址采用不同的超时时间,这样可以使连接池模块适应于异构网络环境中
.新特性:http_request/http_request_pool/http_request_manager 类支持 SSL 通信方式
.新特性:增加了 xml1.cpp/xml1.hpp 以便于支持第一个 xml 解析器
.新特性:增加了 xml2.cpp/xml2.hpp 以便于支持第二个 xml 解析器
.新特性:xml2 新增构造函数,可以更方便地使用内存文件映射方式解析和创建 xml 对象(目前仅支持 UNIX)
.新特性:xml2 类新增构造函数以文件句柄为构造参数
.新特性:xml_node 类中增加接口 detach 用于将一个 xml 节点从 xml 对象树中分离
.问题修复:redis_zset::zrangebyscore_get 其中的 argc 计数有误
.问题修复:redis_command 类中有两处 build 函数在构建请求命令时应该支持二进制格式
.问题修复:redis_zset::zstore 在判断 aggregate 时有误
.问题修复:连接池基础类 connect_pool 中的方法 check_idle 当参数 exclusive 为 false 时会造成提前解锁; 该 BUG 影响所有该类的子类
.问题修复:string 类中的方法 strip 在当其中的参数 each 为 true 时分析方法有误
.问题修复:string 类中的方法 strip 当其中参数 each 为 false 时分析方式有误
.问题修复:db_mysql 类内部在出错重连时,没有使用初始连接时使用的字符集
.问题修复:HttpServletRequest 类中方法 readHeader 当调用方法 getContentLength 时返回 -1,则会造成下面调用 acl_mymalloc((size_t) len + 1) 时崩溃,现在针对 getContentLength 返回 -1时,直接返回
.问题修复:mail_message 类中的 append_addrs 方法存在一处指针溢出的 BUG
.问题修复:修复了 dbuf_obj 构造函数中的 BUG,应该首先将 nrefer_ 初始化为 0
.问题修复:dbuf_guard 类在创建数组容器时需要调用 dbuf_keep 以保留内存池中的所在内存块
.问题修复:dbuf_guard 类中在调用 dbuf_reset 时应该首先将所有管理的对象进行析构
.问题修复:zlib_stream 类在加载 zlib1.dll 库时不应该打开 deflateInit2,而应该打开 deflateInit2_ 地址,因为 deflateInit2 只是一个宏定义,而 deflateInit2_ 才是动态库的函数地址
.问题修复:polarssl_io::read 中当 ssl_read 返回数据后,应该通过调用函数 ssl_get_bytes_avail 判断 SSL 缓冲区中是否还有数据,如果有,则应该设置 ACL_VSTREAM::sys_read_ready 标志位
.问题修复:db_mysql 类中,在初始 mysql 连接时,因为 libmysqlclient 库内部会通过 mysql_thread_init 初始化每个线程的线程局部变量,但却不会在线程退出前自动释放这些线程局部变量,这在多线程环境下会造成内存泄露,因为在 db_mysql 类内部增加了线程退出前调用 mysql_thread_end 来释放这些线程局部变量
.问题修复:xml1/xml2 类中的方法 reset 应该将 root_ 节点删除,因为调用 acl_xml_reset/acl_xml2_reset 后 xml 对象中 root 节点被释放,此时 root_ 节点所引用的根节点已经不存在
.性能:http 模块的相关类(HttpCookie, http_header, HttpServlet, HttpServletRequest, HttpServerResponse)通过引入会话内存池(dbuf_pool)进行内存管理,从而大大提高了处理性能
.编译:VC2010 工程中未包含 thread_queue 类的源文件和头文件
四、参考链接:
下载:http://sourceforge.net/projects/acl/
github: https://github.com/acl-dev/acl
国内镜像:https://git.oschina.net/acl-dev/acl
技术文章:http://zsxxsz.iteye.com/
相关推荐
spring security 3.1.4的release包 需要的可以拿走
《Taro多端统一开发框架 v3.1.4——构建高效跨平台应用的利器》 Taro,作为一款开源的多端开发框架,旨在解决现代Web开发中的一个核心问题:如何在一个代码库中实现多平台(如Web、微信小程序、H5、React Native等...
《农行网上支付平台-商户接口编程指南-ASP.NET_3.1.4》是针对中国农业银行网上支付平台的商户进行接口开发的详细指导文档,主要针对ASP.NET技术栈,版本为3.1.4。这篇指南旨在帮助开发者集成农行的支付系统,实现...
Modbus是基于ASCII或RTU(远程终端单元)的串行通信协议,支持TCP/IP网络协议,广泛用于PLC(可编程逻辑控制器)、SCADA(监控与数据采集系统)以及其他工业设备间的数据交换。其主要特点是简单、可靠,允许设备...
此外,Hadoop 3.1.4还提升了网络通信性能,增强了安全性和稳定性。 配置Hadoop涉及多个步骤,包括环境变量设置、配置文件修改、集群节点间通信的配置等。这个预配置版本已经完成了这些工作,用户只需解压并根据提供...
4. **spring-security-ldap-3.1.4.RELEASE.jar**:此模块支持与LDAP(轻量级目录访问协议)服务器进行集成,实现用户身份验证和授权。它提供了LDAP数据源的配置和查询功能。 5. **spring-security-acl-3.1.4....
4. **WS-I兼容性**:CXF致力于符合WS-I(Web Services Interoperability)基本配置,确保跨平台的互操作性。 5. **代码生成**:CXF提供基于WSDL(Web Service Description Language)的代码生成工具,可以自动生成...
Hadoop 3.1.4 是 Apache 软件基金会发布的一个重要版本,它作为大数据处理的核心框架,为用户提供了高效、可靠的分布式计算能力。在这个版本中,Hadoop 进行了多方面的优化和增强,使得它在处理海量数据时性能更优,...
JFinal Extentions 3.1.4 的发布通常伴随着详细的文档和活跃的社区支持,开发者可以在官方博客(如给出的博客链接)或社区论坛中获取帮助,解决遇到的问题。 总结来说,JFinal Extentions 3.1.4 是 JFinal 框架的一...
对于RESTful服务,CXF支持JAX-RS(Java API for RESTful Web Services)标准,这是一个Java平台上的RESTful服务开发规范。JAX-RS 2.0是CXF 3.x系列支持的版本,它引入了许多新功能,如异步处理、统一异常处理和链接...
此外,它还内置了许多有用的库,如数学运算库、操作系统接口、网络通信模块等。Python的生态系统庞大,拥有丰富的第三方库,如NumPy用于科学计算,Pandas用于数据处理,Django和Flask用于Web开发,以及Matplotlib和...
它可以与Spring MVC无缝集成,提供基于角色的访问控制和CSRF(跨站请求伪造)防护。 至于压缩包中的"dist"文件,这通常指的是分布文件或部署文件夹,可能包含了所有需要运行Spring 3.1.4应用程序的jar包和其他相关...
MPI 是一种广泛使用的编程接口,用于编写跨多个处理器进行通信和协调的高性能科学计算应用。MPICH 的版本 3.1.4 是该库的一个稳定版本,提供了许多改进和新特性。 在并行编程中,MPICH 是一个关键组件,因为它实现...
总的来说,Hadoop 3.1.4是一个强大的大数据处理平台,适用于大规模数据处理和分析。无论是对初学者还是专业人士,理解其架构、配置和使用方法都是至关重要的,而这个压缩包就是探索和学习Hadoop的起点。
【wxWidgets】是一个开源的C++库,专为构建跨平台的图形用户界面应用程序而设计。这个库使得开发者能够在不同的操作系统上使用相同的代码基础进行开发,包括Windows、Linux、macOS等。标题中的"wxWidgets-3.1.4_...
Spring 3.1.4.RELEASE 是该框架的一个稳定版本,它包含了多个模块和改进,以提高开发效率和应用的可维护性。这个压缩包包括了Spring框架的核心组件、文档以及相关的JAR包,使得开发者能够快速地在项目中集成和使用...
这个压缩包包含了SSM框架的特定版本:Spring3.1.4、SpringMVC3.1.4以及Mybatis3.2.3的核心库,这些都是开发基于Java的企业级应用的基础。 1. **Spring框架**: - Spring3.1.4是Spring框架的一个重要版本,它提供了...
3.1.4版本的发布意味着对之前版本的升级或修复,可能包括解决已知问题、增加新的功能支持或者提升与其他系统的互操作性。 【标签】"HSM USB Serial Driver" 进一步强调了这个软件组件的核心功能,即为USB接口的HSM...
Spring 3.1.4.RELEASE 是该框架的一个版本,它包含了框架的核心功能和许多重要的改进与修复。在深入探讨 Spring 源码之前,我们需要了解 Spring 的基本架构和主要模块。 1. **核心容器**:Spring 框架的核心部分是 ...
Smarty是PHP世界中的一款著名模板引擎,它的主要目标是将应用程序的逻辑与界面设计分离开来,让开发者专注于代码编写,而设计师可以独立地进行页面布局和设计,从而提高开发效率和代码可维护性。Smarty v3.1.4 是这...