acl 3.1.3 版本发布了,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 升级的主要内容有:修复了 lib_acl_cpp 库中 redis 模块中几处 BUG,增加了对 redis geo 地理位置操作的支持;增加数据库连接池集群管理功能;有针对性地优化了某些模块的性能;HTTP 模块增加了服务端响应 gzip 数据的功能;其它大量的功能特性增加。
acl 包括以下丰富的常用函数库:
1、常见网络应用库: SMTP 客户端库/PING 库/memcache 客户端库/handlersocket 客户端库/beanstalk 客户端库/redis 客户端库/disque 客户端库
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
.新特性:acl_dbuf_pool.c 增加了 acl_dbuf_pool_reset 方法,可以方便该
内存池被重复使用
.新特性:acl_msg.c 文件中,即可以将日志信息记入文件中,同时又可以输出
至屏幕
.问题修复:acl_urlcode.c 中函数 acl_url_decode 当输入串非法时有可能造成内存溢出
.性能:acl_read_wait.c 中函数 acl_read_wait 在 linux 下采用
epoll,性能提升不少
.性能:acl_vstream.c 性能优化,acl_vstream_read 提供预读功能
.性能:acl_dbuf_pool.c 性能优化,将内存分配次数由原来的三次减少
至一次
.性能:acl_json.c/acl_vstring.c 支持使用 ACL_DBUF_POOL 内存池
进行内存分配,从而大大提升了性能
.编译:支持在 VC x64 环境下编译使用
.其它:为了防止因在 acl_define_win32.h 中将 FD_SETSIZE 设置的过大
而导致进程在64位环境下堆栈溢出(VC 编译时的默认堆栈为1MB),将 FD_SETSIZE 设为 40000
二、lib_protocol 库
.问题修复: http_hdr.c 中的函数 http_hdr_print/http_hdr_fprint/http_hdr_sprint
应过滤掉被禁掉的 HTTP 部字段
.编译:支持在 VC x64 环境下编译使用
.编译:去掉了 -pedantic 编译选项,因为其与 __FUNCTION__ 冲突
三、lib_acl_cpp 库
.特性:locker.cpp 中类 locker 增加了针对自旋锁的支持
.特性:新增 redis_session 类
.特性:db_handle.cpp 中的 db_row 类增加了 field_double 方法
.特性:增加了类 thread_queue 用来处理线程消息队列
.特性:dbuf_pool 类增加了 dbuf_reset 方法,可以重复使用该类对象
.特性:http_client 类增加了几个用于 HTTP 头部字段修改的方法
.特性:HttpServletRequest 类增加了 getRange 方法用于数据断点续传过程中
.特性:http_client 类增加了 get_range 方法,用于数据断点续传过程中
.特性: HttpServlet 类增加了自动判断是否需要与客户端保持长连接的方法
.特性:增加了 redis_geo 类,用于支持 redis 地理位置信息处理功能
.特性:db 模块的查询类 query 添加了 double/float 类型
.特性:HttpServletRequest 类增加了直接提出 xml 和 json 对象的方法
.特性:HttpServlet 类中的方法 doRun 内部在响应客户端请求时,会首先
根据客户端的请求头字段(Connection) 自动设置响应头中的 Connection 头字段
.特性:针对标准输入输出增加了两个流对象:stdin_stream, stdout_stream
.特性:db_handle/db_mysql/db_sqlite 类中提供了静态方法用来设置动态库动态
加载的全路径
.特性:延长了 xml/json 模块在遍历时产生的临时结点对象的生命周期
.特性:db 模块增加了数据库连接池集群管理
.特性:mysql_manager 支持设置连接池中每个连接的空闲生存周期
.特性:增加静态方式 log::debug_init 方便打调试日志记录接口
.特性:HttpServlet::doRun 方法在第一次 IO 出错时才会调用 doError 方法
.特性:HttpServletRequest 类的方法 getContentType 增加了一个 http_ctype
类对象指针,允许用户可以获得更多的 Content-Type 中的信息
.特性:http_ctype 类支持对象拷贝功能
.特性:HttpServletResponse 类中的输出流对象采用了统一了 http_client 类型
.特性:http_client 类支持响应 gzip 压缩类型的数据
.特性:http_client/http_request 类在读取压缩数据体时,会自动处理
临时处理结果为 0 的情况,以降低使用复杂度
.特性:db_handle/db_mysql 支持事务提交接口
.特性:string 类在进行 base64 解码时,需要自动在尾部添加 \0 以防止使用者
缓冲区溢出
.问题修复:redis 模块中的一些使用变参的方法中有的地方漏掉了第一个变参
.问题修复:redis_client_cluster 中的前向类声明 redis_pool 应该为
redis_client_pool
.问题修复:redis_key.cpp -> randmkey 请求命令组包有误
.问题修复:redis_zset 类有一处在调用 sizeof 时存在问题
.问题修复:beanstalk::ignore_all 内部有内存泄露
.问题修复:redis_hash::hexists 判断返回值有误
.问题修复: redis_script.cpp 中 eval_cmd 函数的 key 个数计算方式有误
.问题修复: redis_command.cpp 中的 run(redis_client_cluster*, size_t) 函数
中可能存在当 conn 对象被释放后再次非法引用的情形,现在将该对象的释放放在引用的代码之后
.问题修复:dbuf_pool 类对象必须动态创建,因此需要将析构函数设为私有方法
.问题修复: redis_command::redirect() 函数内当 cluster->peek() 返回 NULL
时应该直接返回 NULL
.问题修复:redis_zset::zrange_get_with_scores 在取得结果时处理的顺序存在问题
.问题修复:redis_string::incoper 内部在区分 INCR 与 INCRBY, DECR 与 DECRBY
的方法有误
.问题修复:redis_command/redis_key/redis_hash/redis_set/redis_zset 在
遍历过程中,可能服务端会返回 cursor 为 > 0 但结果集为空的情况,需要对这种情况进行处理
.性能:redis_command 类当每一个命令处理完毕后不再释放内存池对象,而是复用之
.编译:消除了在 MACOSX 上的一些编译错误
.编译:支持在 VC x64 环境下编译使用
四、示例
.示例:增加示例 samples/redis/redis_geo 用来测试地理信息模块类 redis_geo
.示例:samples/db/mysql_query: 完善了示例功能
.示例:增加了示例 samples/db/mysql_pool,用来测试多线程环境下的数据库
连接池操作
.示例:samples/redis,测试用例中针对出错地方增加了错误内容提示
.其它:类 db_pool 中的 peek 方法被注为过期的,建议使用 peek_open 方法,
使用方式更为简单
五、参考链接:
download:http://sourceforge.net/projects/acl/
github:https://github.com/acl-dev/acl
技术博客:http://zsxxsz.iteye.com/
QQ 群:242722074
- 浏览: 451084 次
- 性别:
- 来自: 北京
最新评论
-
zsxxsz:
2202877 写道你好,请问一下acl库是否可以移植到arm ...
利用ACL开发并发网络服务器 -
taoshengyijiu20008:
非常不错啊
acl 服务器编程框架设计要点 -
lgqss:
最后的例子用了__thread,依然不能用在动态库中?
再谈线程局部变量 -
foxbryant88:
膜拜中~
我为什么要发明一个轮子? -
zsxxsz:
eryueniaobp 写道关于reset的使用,查看了 g ...
使用 acl 库编写高效的 C++ redis 客户端应用
相关推荐
Python 3.1.3是该语言的一个早期版本,它在2012年发布,为用户提供了许多改进和更新。这个版本的MSI(Microsoft Installer)安装包是专门为Windows操作系统设计的,使得在Windows环境下安装Python变得简单便捷。 1....
Python 3.1.3rc1是Python 3.1系列的一个预发布版本,"rc1"代表“Release Candidate 1”,这意味着它是一个在正式发布之前供开发者测试和评估的版本。这个版本通常会在修复了大量bug并进行了一系列改进后推出,以确保...
10. **Windows和Mac兼容**:SourceTree支持跨平台使用,无论你是在Windows还是Mac上,都能享受一致的体验。 ### 安装与使用 在收到的压缩包中,包含的"SourceTree3.1.3版本.exe"文件就是SourceTree的安装程序。...
在【标题】"spring3.1.3 release" 中,我们关注的是 Spring 框架的 3.1.3 版本,这是一个稳定版本。相较于描述中提到的 3.2 版本,尽管它是较新的,但可能还处于测试阶段,因此选择 3.1.3 是为了确保稳定性和可靠性...
同时,注意保持与其他Spring框架版本的兼容性,以避免潜在的版本冲突问题。 在升级或迁移Spring Security版本时,务必检查官方文档和变更日志,了解新版本带来的改进和可能的API变更,以确保平滑过渡。总的来说,...
3.1.3版本是在2012年10月31日发布的,这在当时是一个重要的更新,为开发者带来了多项改进和新特性。下面将详细讨论Spring 3.1.3中的关键知识点。 1. **依赖注入(Dependency Injection, DI)**:Spring的核心特性之...
在您提供的资源中,我们看到的是ThinkPHP的3.1.3版本,这是一个较早但稳定的基础,对于初学者和熟悉旧版系统的人来说非常有用。下面我们将详细探讨这个框架的一些关键特性、使用场景以及它如何含括所有扩展。 1. **...
HDFS是一种分布式文件系统,能够将大型数据集分布在多台廉价服务器上,而MapReduce是处理这些数据的编程模型,它将任务分解为“映射”和“化简”阶段。 2. **HDFS**:HDFS的设计目标是容错性和高吞吐量的数据访问。...
本文将深入探讨Spring框架3.1.3版本的核心组件与功能,以帮助开发者更好地理解和应用这一强大的框架。 Spring框架是一个开源的Java平台,它主要提供了依赖注入(Dependency Injection,DI)、面向切面编程(Aspect-...
ThinkPHP3.1.3版本相对于上一版本更加安全和易用,是一个建议升级的版本。 更新 该版本针对3.1.2进行了一些改进和完善,主要包括: 改进异常处理,支持致命错误捕获; 针对PDO驱动和Sqlsrv驱动的完善,支持参数...
BageCMS是一款基于PHP与MySQL构建的跨平台内容管理系统(CMS),广泛应用于各类网站建设和管理中。然而,在其V3.1.3版本中存在一个严重的安全漏洞——后台任意文件读取漏洞,这可能导致攻击者获取敏感信息甚至控制...
Unity DoozyUI 是一款专...总之,Unity DoozyUI 3.1.3版本是一个强大且易用的UI解决方案,结合DOTweenPro,能够帮助开发者快速打造精美、互动性强的UI界面,尤其适合那些希望专注于游戏内容开发而非底层UI编程的团队。
标题中的“thinkphp3.1.3完美支持php7”意味着这个压缩包是针对PHP7环境优化过的ThinkPHP 3.1.3框架版本。ThinkPHP是中国常用的开源PHP框架之一,以其简洁、高效的代码风格和丰富的功能而受到开发者的欢迎。PHP7则是...
在使用此安装包时,需要注意的是,旧版本的Python可能不支持某些现代库和框架,因此对于新项目,通常推荐使用较新且更稳定的版本,如Python 3.9或更高版本。然而,对于需要兼容旧代码或研究历史版本特性的场合,...
wxWidgets是一个开源的C++库,它为开发者提供了一种跨平台的方式,可以在多个操作系统上构建图形用户界面(GUI)应用程序。这个库的名字是“Windows Widgets”的缩写,但实际上它支持远不止Windows平台,还包括Linux...
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合...
这个“网络测速工具iperf-3.1.3-win64.rar”压缩包包含了iperf的Windows 64位版本,以及一个名为cygwin1.dll的依赖库文件。 iperf的主要功能是测量网络连接的速度和带宽,通过在客户端和服务器之间发送数据来测试...
在这个特定的案例中,我们关注的是`apache-xmlrpc-3.1.3.jar`,这是Apache XML-RPC库的版本3.1.3的Java实现。 XML-RPC的核心思想是简化分布式系统的交互,它定义了一种简单、跨平台的数据交换格式——XML,以及一套...
8. **spring-security-cas-3.1.3.RELEASE.jar**:CAS(Central Authentication Service)支持模块允许Spring Security与CAS服务器集成,实现单点登录(SSO)功能。 9. **spring-security-taglibs-3.1.3.RELEASE.jar...
Resin 3.1.3 是一款高效且功能丰富的Web应用服务器,与知名的Tomcat相比,它在性能和可扩展性方面有着独特的优势。这款服务器主要用于支持Java Web应用程序,包括Servlets、JSP以及JavaServer Faces (JSF)等技术。...