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/zhengshuxin/acl
技术博客:http://zsxxsz.iteye.com/
QQ 群:242722074
相关推荐
-
.Net下对ActiveMQ的使用
文章出处:http://www.cnblogs.com/chengxc/p/ActiveMQ.html 刚来到一个新公司,因为项目需要,要使用ActiveMQ,... ActiveMQ是一个开放源码,基于Apache2.0 licenced的,实现了JMS1.1的消息中间件 一开始不知道什
-
Spring Boot的JMS发送和接收队列消息,基于ActiveMQ
消息队列ActiveMQ是JMS的一种实现,ActiveMQ可以单独作为一个消息队列组件即插即拔,即插即用,参考下面两篇文章: 分布式MQTT消息订阅-发布框架:高可用性ActiveMQ_Zhang Phil-CSDN博客_mqtt分布式架构分布式MQTT...
-
docker+k8s+activemq+.net core 客户端实现
源码: 一,使用docker 容器 部署 ActiveMQ 1,查找activemq镜像 # docker search activemq NAME DESCRIPTION STARS OFFICIAL AUTOMATED webcenter/activemq A.
-
.Net平台下ActiveMQ
摘要: .Net下对ActiveMQ的使用 ".Net下对ActiveMQ的使用":关键词:net 下 activemq 使用 刚来到一个新公司,因为项目需要,要使用activemq,于是就研究了一下,写下此篇笔记,借鉴...
-
详解消息中间件及其应用场景和常用消息中间件的技术选型(RabbitMQ、Kafka 、RocketMQ、ActiveMQ)
消息中间件简介 消息中间件的使用场景 消息中间件的产生背景、特点和常用协议 常用消息中间件介绍(RabbitMQ、Kafka 、RocketMQ、ActiveMQ) 常用消息中间件的对比 常用消息中间件,如何技术选型?
-
activemq消息丢失解决
可以控制每个消息队列中数据的大小,不允许无线填充数据,避免该队列多大,导致过度消耗系统资源问题; 可以控制队列的内存大小; activeMQ数据丢失怎么办? 可以使用对数据进行持久化JDBC,AMQ(日志文件)...
-
分布式消息中间件,ActiveMQ 消息中间件进阶与应用详解
ActiveMQ进阶与应用详解 一、常见的消息中间件 市面上常见的消息中间件有:ActiveMQ、RabbitMQ、kafka 二、ActiveMQ 是什么 ? ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个...
-
java activemq 断线_Java什么是activemq?怎么解决宕机?丢消息怎么办?
01什么是activemqactiveMQ 是一种开源的,实现了 JMS1.1 规范的,面向消息(MOM)的中间件,为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通信02ActiveMq宕机怎么办这得从 ActiveMQ 的储存机制说起。...
-
activeMQ高并发发送消息异常解决方法
现象:使用10个线程每100ms发送一条消息,大约3000多条后,出现异常,所有线程停 止: javax.jms.JMSException:Could not connect to brokerURL: tcp://localhost:61616.Reason:java.net.BindException:...
-
java监控activemq消息堆积_activemq读取剩余消息队列中消息的数量
先上原文链接:http://blog.csdn.net/bodybo/article/details/5647968ActiveMQ在C#中的应用ActiveMQ是个好东东,不必多说。ActiveMQ提供多种语言支持,如Java, C, C++, C#, Ruby, Perl, Python, PHP等。由于我在...
-
activemq控制发送频率_activeMQ 使用总结(机制介绍)
1 基本处理方式1.1 topic(publish-subscribe)发布订阅模式,发布者发布消息到broker,所有订阅者都会接收到相同消息的copy。 1.2 queue(p2p)p2p是生产者生成消息,经过broker-queue,只能有一个消费者处理。在p2p的...
-
ActiveMQ消息确认策略与支持协议
消息发送到broker以后,producer会等待broker对这条消息的处理情况的反馈,对于消息的反馈则可以设置消息发送端发送持久化消息的异步方式: connectionFactory.setUseAsyncSend(true); 回执窗口大小设置,一个有效...
-
ActiveMQ 可以干什么?
在这种情况下在这一点上,不同的客户机接口使它可以通过发送和接收消息(跨语言通信),ActiveMQ不管使用的是什么语言。除了跨语言由ActiveMQ的能力,将这些程序的能力没有使用rpc有绝对一大好处,因为消息中间件...
-
ActiveMQ异步发送消息
如果应用程序能够容忍一些消息的丢失,那么可以使用异步发送。异步发送不会在受到 broker 的确认之前一直阻塞 Producer.send 方法。如果想启动异步传送可以把 connector uri 的 jms.useAsyncSend 选项设为 true,...
-
ActiveMQ消息发送和接收
JMS即Java消息服务(Java Message Service)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API...
-
SpringMvc+Spring+ActiveMQ发送接收Mqtt消息Maven-Demo
MQ是消息中间件,是一种在分布式系统中应用程序借以传递消息的媒介,常用的有ActiveMQ,RabbitMQ,kafka。ActiveMQ是Apache下的开源项目,完全支持JMS1.1和J2EE1.4规范的JMS Provider实现。ActiveMQ支持MQTT协议,并...
-
什么是ActiveMQ?
一、官方简介 ...可以使用C,C ++,Python,.Net等连接。使用无处不在的AMQP协议集成您的多平台应用程序。使用STOMP通过websockets 在Web应用程序之间交换消息 官网:http://activemq.apache.org/...
-
【国庆活动】消息中间件ActiveMQ常见问题解析
这些预获取的消息,在还没确认消费之前,在管理控制台还是可以看见这些消息的,但是不会再分配给其他消费者,此时这些消息的状态应该算作“已分配未消费”,如果消息最后被消费,则会在服务器端被删除,如果消费者...
-
ActiveMQ应用场景及应用实例总结
 本文主要对ActiveMQ应用场景及应用实例进行了总结,本文源码已上传github,链接在文末。
-
基于微信小程序的在线办公小程序答辩PPT.pptx
基于微信小程序的在线办公小程序答辩PPT.pptx