acl

C/C++ server and network library, including coroutine,redis client,http/https/websocket,mqtt, mysql/postgresql/sqlite client with C/C++ for Linux, Android, iOS, MacOS, Windows, etc..

LGPL-3.0 License

Stars
2.8K
Committers
28

Bot releases are hidden (Show)

acl - acl.3.4.0 rc1 release!

Published by zhengshuxin almost 7 years ago

This is an important update including the below features:

  1. acl_master as a alone module
  2. acl fiber was rewritten with new event framework
  3. many features added and many bugs fixed
acl - acl.3.3.0 released!

Published by zhengshuxin over 7 years ago

acl 3.3.0 版本发布了,acl 是 one advanced C/C++ library 的简称,主要包括网络通信库以及服务器框架库等功能,支持 Linux/Windows/Solaris/FreeBsd/MacOS 平台;整个 acl 项目主要包含四个函数库:lib_acl(纯C开发的基础库,主要包含网络通信及服务器编程框架以及其它丰富的功能)、lib_protocol(包含 HTTP/PING/SMTP 通信协议的C语言实现)、lib_fiber(网络协程库)、lib_acl_cpp(基于 lib_acl 及 lib_protocol 两个C库,提供了更为强大的编程接口及丰富的功能类)。
本次 acl 升级为大版本升级,主要内容为:全面支持移动端(Android, IOS)平台,支持 IPV6,协程库功能更加完善,修复了 redis 客户端库几处关键问题;此外,还增加了 cmake 支持,修复了其它多处问题。

acl 包括以下丰富的常用函数库:
1、服务器框架:包括进程池模式、线程池模式、非阻塞模式、UDP通信模式、触发器模式以及协程模式
2、网络通信库:阻塞/非阻塞网络 IO 库(其中 lib_acl_cpp 库通过嵌入 polarssl 而具备了 SSL 通信能力)
3、HTTP 网络库:HTTP 客户端/服务端库,HTTP 服务端支持 HttpServlet 接口访问方式;支持 HTTP cookies/session;HTTP 客户端支持连接池及连接池集群;支持 Websocket
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 解析库采用有限状态机方式解析数据,处理方式更为灵活
11、网络协程库:该库将阻塞 IO 模式在底层通过上下文切换和事件触发方式转变为非阻塞模式,从而方便程序员快速编写高并发、高性能的网络服务
12、支持将 C++ struct 对象序列化与反序列化(序列化为 Json 对象及由 Json 对象反序列化)

示例:
1、lib_acl/samples: 该目录下有大量的基于 lib_acl C 库的示例
2、lib_protocol/samples: 该目录下有大量的基于 lib_protocol C 库的示例
3、lib_acl_cpp/samples: 该目录下有大量的基于 lib_acl_cpp C++ 库的示例
4、lib_fiber/samples:该目录下有大量的基于协程的网络客户端/服务端示例

应用:
1、app/redis_tools: 该目录下为 redis 集群管理、监控及智能创建工具
2、app/wizard:用来自动生成 acl 服务器框架的向导程序
3、app/master_dispatch:用于管理和分发客户端连接的服务程序
4、app/gid:用来产生全局唯一整型 ID 的服务程序及客户端库
5、app/wizard_demo:为一些服务器测试程序
6、app/gson:json 序列化及反序列化代码生成工具

一、基础 C 库:lib_acl
.新特性:增加了内存调试函数 acl_default_meminfo 用来显示内存分配及释放情况
.新特性:acl_master 服务器框架支持监听地址的模糊匹配机制,以便于多机部署时的配置文件一致性
.新特性:acl_aio_server.c/acl_threads_server.c/acl_single_server.c 增加回调函数 __service_on_listen,以便于将监听的流对象传递给应用
.新特性:acl_mem_slice.c 中的函数 tls_mem_realloc 允许源指针为 NULL
.新特性:json 类对象在创建 json 字符串时默认不自动添加空格,但允许调用者设置参数以便于自动添加空格从而使 json 字符串更可读
.新特性:所有网络模块均支持 IPV6

.问题修复:acl_vstream.c 中的函数 acl_vstream_fdopen 设置 IO 句柄为非阻塞模式是存在问题的,上层应用应该自己决定是否设为非阻塞模式
.问题修复:acl_slice.c 中修复了 SLICE1 方式分配内存的一处 BUG
.问题修复:acl_dbuf_pool.c 支持 ARM LINUX,内部在分配内存片时,应该是 4 字节对齐
.问题修复:acl_scan_dir.c 中函数 acl_scan_dir_push 在 windows 下存在问题,会造成死循环
.问题修复:acl_atomic.c/acl_mbox.c/acl_pthread_mutext.c 存在内存泄露问题
.问题修复:rfc1035.c 中的函数 rfc1035MessageUnpack 存在内存泄露
.问题修复:acl_pthread_cond.c 中在 windows 平台下当释放线程锁时会造成内存重复释放的问题,主要还是 acl_pthread_mutex_create 的函数设计不合理所致,故去掉了 acl_pthread_mutex_create 以免引起误用

.编译:在 Linux/Android/Macos/IOS/FreeBSD/Windows 平台下编译时,由头文件自动识别操作系统类型,无需在 Makefile 文件中专门指定

二、lib_protocol 库
.无变化

三、lib_acl_cpp 库
.新特性:master_proc.cpp/master_threads.cpp/master_aio.cpp 的类中增加虚方法 (proc_)on_listen,以便将监听对象传递给应用
.新特性:redis_command/redis_client 增加连接 IP 地址校验检测功能,主要用于调试情况
.新特性:json.cpp 中 json 类及 json_node 类中的 to_string 方法允许复用用户传入的缓冲区
.新特性:gson 对象序列化模块支持 struct 对象的成员函数及非序列化成员变量
.新特性:gson 对象序列化模块增加成员函数限定符的支持
.新特性:db 模块中 db_handle/db_mysql/db_sqlite 在查询时,允许将结果集存储于用户输入的对象中,从而实现结果集与 db 句柄分离的目的
.新特性:db_handle 模块支持事务回滚
.新特性:json 类对象在创建 json 字符串时默认不自动添加空格,但允许调用者设置参数以便于自动添加空格从而使 json 字符串更可读
.新特性:增加 mbox 类用于消息队列的发送与读取,该类封装了 C 对象 ACL_MBOX

.问题修复:redis_result::argv_to_string 返回值应该 >= 0
.问题修复:redis_command::run() 中当循环次数超过阀值后应该将连接归还给连接池
.问题修复:redis_list::bpop 及 redis_pubsub::get_message 的超时时间应不受 socket_stream 里的超时时间影响
.问题修复:redis_script 类中的参数顺序有误
.问题修复:redis_client.cpp 中的 run 方法在进行连接重试时,如果请求数据为空,则不应进行重试,而是应直接给上层应用返回失败,由应用层处理,比如对于 redis_pubsub 类中的方法 get_message 是没有请求命令的,针对此情况的连接重试,并不会重新获得订阅信息
.问题修复:redis_pubsub 类中如果通过 psubcribe 订阅消息时,get_message 则会出错,需要 get_message 使其同时支持 subcribe 及 psubscribe
.问题修复:redis_command::run 中当遇到 ASK 命令执行重定向成功,但紧接着执行命令时如果失败,则应该将该连接归还给连接池
.问题修复:redis_command::run 当连接异常断开时应该对 request_obj_ 判空
.问题修复:redis_command::run 当连接异常断开时,在将连接归还给连接池时应提前保留连接池对象以备下面使用
.问题修复:istream.cpp 中的 gets 函数不应当读超时时设置 eof_ 标志位
.问题修复:master_threads.cpp 中 thread_on_handshake 被调用了两次
.问题修复:gson 对象序列化模块修改了 std::map 第二个参数不能为类对象的问题
.问题修复:当启用 -DNDEBUG 编译选项时,内部一些调用 assert 的语句会被过滤掉,可能导致一些代码逻辑无法执行
.问题修复:db_mysql.cpp 当进程退出前会自动卸载 mysql 动态库,但 mysql 的句柄有可能会在该操作后发生,从而造成程序崩溃,增加判断条件以防止此问题发生
.问题修复:db_mysql/db_sqlite 模块当采用静态方式使用时,编译出错

.编译:gsoner.cpp, http_header.cpp 用 VC x64 编译时有警告

四、lib_fiber 库
.新特性:增加 acl_fiber_kill 接口用来通知指定协程退出
.新特性:fiber.cpp 中,fiber 类增加了 kill 和 killed 方法用来”杀死“协程和判断指定协程是否已经退出
.新特性:acl_fiber_kill 可以支持因调用 acl_fiber_sleep, acl_fiber_sem, acl_fiber_mutex_lock 而阻塞的协程
.新特性:fiber.c 中有关协程局部变量的接口调整,更符合实际应用场景
.新特性:fiber.cpp 允许将当前运行的协程与 fiber 类对象绑定(只需在构造函数中将构造参数设为 true),从而可以方便使用类 fiber 中的方法
.新特性:增加 acl_fiber_signal 函数,允许协程给其它协程发送唤醒信号
.新特性:fiber.c 中 acl_fiber_signal/acl_fiber_kill 中,需要设置 errno 为 ECANCELED
.新特性:fiber.c 中 fiber_alloc 函数当复用缓存的协程内存对象时,应调用 free->malloc,而不是调用 realloc,这样一方面可以避免使用 tcmalloc 时的 valgrind 的内存警告,另一方面,可以有效地使用虚存
.新特性:协程信号量当被跨线程使用时,禁止出现同一信号量被不同线程使用
.新特性:hook_net.c 中新增对 getaddrinfo 的支持

.问题修复:fiber.c 中函数 acl_fiber_create 中存在运行时内存增长问题,即 __thread_fiber->fibers 对象在 realloc 过程中内存不断增长,因为 _thread_fier->size 计算方法有问题
.问题修复:hook_net.c 中,当非协程模式下,hook epoll 相关 API 应该加以区别
.问题修复:hook_net.c, hook_io.c, event_epoll.c 其中因为 hook 了很多系统的 API,当个别应用在 main 函数执行前需要调用这些 API 时可能会因为 hook 操作还未进行而造成函数指针为 NULL,从而导致程序崩溃
.问题修复:fiber.c 中当协程退出时,协程局部变量的对象未释放造成内存泄露
.问题修复:fiber.cpp 中 kill 方法需将 f
成员置 NULL,防止嵌套访问非法地址
.问题修复:协程在双通模式下,如果写时堵塞会导致读也堵塞,是因为延迟关闭及事件设置不合理
.问题修复:fiber.c 中,fiber_init 函数应该必须保证 __sys_errno 为 NULL 时被调用,否则会引起一些静态初始化需要 __sys_errno 的使用
.问题修复:当一个协程处于 poll wait 状态时被另一个协程 kill 掉时,会造成内存非法访问,修复方式是在 event.c 中对 poll list 的遍历访问采用 pop 方式,同时在 hook_net.c 中的 poll 函数中当被 kill 时自动清理自身,与本 BUG 相关的文件有 fiber.c, hook_net.c, event.c,其中 hook_net.c 及 event.c 中的修复是最关键的

.示例:samples/fiber_local,该示例用于测试协程局部变量

五、参考链接:
oschina git:https://git.oschina.net/zsxxsz/acl
github: https://github.com/zhengshuxin/acl/
sourceforge:http://sourceforge.net/projects/acl/
blog: http://zsxxsz.iteye.com/

acl - acl.3.3.0 rc4 release!

Published by zhengshuxin over 7 years ago

fixed some bugs

acl - acl.3.3.0 rc3 release!

Published by zhengshuxin over 7 years ago

acl 3.3.0 is more available!

acl - acl 3.3.0 rc2 release!

Published by zhengshuxin over 7 years ago

Support IPV6 for Linux/Windows/IOS

acl - acl.3.3.0 rc1 release!

Published by zhengshuxin over 7 years ago

support Android Studio, Apple Xcode, cmake develope tools and support Android and IOS.

acl - acl.3.2.2_2 released!

Published by zhengshuxin almost 8 years ago

fixed one urgent bug for db poll when setting charset.

acl - acl.3.2.2_1 released!

Published by zhengshuxin almost 8 years ago

fixed one urgent bug in db_mysql.

acl - acl.3.2.2 released!

Published by zhengshuxin almost 8 years ago

Fixed some bugs known, and add C++ struct serailization, add websocket.

acl - acl.3.2.1 released!

Published by zhengshuxin about 8 years ago

fixed import bugs existing for many years of read line functions.

acl - acl.3.2.0 released!

Published by zhengshuxin about 8 years ago

acl 3.2.0 版本发布了,acl 是 one advanced C/C++ library 的简称,主要包括网络通信库以及服务器框架库等功能,支持 Linux/Windows/Solaris/FreeBsd/MacOS 平台;整个 acl 项目主要包含三个函数库:lib_acl(纯C开发的基础库,主要包含网络通信及服务器编程框架以及其它丰富的功能)、lib_protocol(包含 HTTP/PING/SMTP 通信协议的C语言实现)、lib_fiber(网络协程库)、lib_acl_cpp(基于 lib_acl 及 lib_protocol 两个C库,提供了更为强大的编程接口及丰富的功能类)。
本次 acl 升级的最主要内容为:增加了类似于 golang 中的网络协程库,该库使 C/C++ 程序员可以以顺序编程的思维方式快速地编写出高并发、高性能的网络服务器程序; 此外,lib_acl/lib_acl_cpp 也进行了功能改进和问题修复。

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 解析库采用有限状态机方式解析数据,处理方式更为灵活
11、网络协程库:该库将阻塞 IO 模式在底层通过上下文切换和事件触发方式转变为非阻塞模式,从而方便程序员快速编写高并发、高性能的网络服务

示例:
1、lib_acl/samples: 该目录下有大量的基于 lib_acl C 库的示例
2、lib_protocol/samples: 该目录下有大量的基于 lib_protocol C 库的示例
3、lib_acl_cpp/samples: 该目录下有大量的基于 lib_acl_cpp C++ 库的示例
4、lib_fiber/samples:该目录下有大量的基于协程的网络客户端/服务端示例

应用:
1、app/redis_tools: 该目录下为 redis 集群管理、监控及智能创建工具
2、app/wizard:用来自动生成 acl 服务器框架的向导程序
3、app/master_dispatch:用于管理和分发客户端连接的服务程序
4、app/gid:用来产生全局唯一整型 ID 的服务程序及客户端库
5、app/wizard_demo:为一些服务器测试程序

一、基础 C 库:lib_acl
.新特性:acl_threads_server.c 在 alone 模式下运行时,释放全局分配的动态对象,以便于用户使用 valgrind 查找内存问题
.新特性:acl_read_wait.c 中的读超时重新使用 epoll 来判断,为防止 epoll 句柄被异外关闭,内部增加了重新打开 epoll 句柄的功能
.新特性:acl_xml_parse.c/acl_xml2_parse.c 当输入为 NULL 时返回 ""
.新特性:在 acl_vstream.c 的 acl_vstream_fdopen 时针对带有读写超时的 socket 的设置为非阻塞模式,这样代码逻辑更为清晰
.新特性:acl_sys_socket.c 中的 SOCKET IO 过程允许被 HOOK,这样 acl_vstream.c 中的 acl_vstream_fdopen 在创建 SOCKET 流对象时允许使用被 HOOK 的函数
.新特性:增加原子操作 acl_atomic.c, 无锁队列 acl_yqueue.c, acl_ypipe.c
.新特性:增加 acl_mbox.c 用于线程之间的单向通信,内部使用了无锁队列方式效率更高
.新特性:json 解析器支持 double 数据元素

.问题修复:acl_sys_socket.c 中函数 acl_socket_write 修改了写超时的问题
.问题修复:acl_sys_file.c 中的函数 acl_file_open 当以 O_APPEND 方式打开文件时, 文件指针没有指向文件尾部
.问题修复:events_kernel.c 中的 stream_on_close 当 fdp == NULL 时直接返回
.问题修复:events_epoll_thr.c 中的 event_enable_read 函数里,解锁调用过程 THREAD_UNLOCK 需要 epoll_ctl 调用之后,以免主线程和子线程同时操作同一对象
.问题修复:acl_vstream.c 中的 acl_vstream_writevn 函数数据指针偏移有问题,导致写入的数据量计数错误
.问题修复:events.c 中的函数 event_thr_prepare/event_prepare 中,如果当 ACL_VSTREAM_BFRD_CNT 及 read_ready 两个条件同时满足时,ACL_VSTREAM_BFRD_CNT 满足条件如果放置在 read_ready 前面,会造成 read_ready 被提醒清除,因此,需要把 read_ready 条件放置在前面
.问题修复:acl_json_parse.c 中,在解析 JSON 过程中需要设置叶节点标志

.性能:events_epoll_thr.c 的 event_enable_read 函数中,通过设置/清除标志位 EVENT_FDTABLE_FLAG_FIRE 来达到减少 epoll_ctl 的调用次数,从而提高事件处理性能

二、lib_protocol 库
.特性:http_hdr_res.c 中的函数 http_hdr_res_parse 取消了对 http_status 的检查,以便于应用使用自定义状态码

三、lib_acl_cpp 库
.新特性:xml/xml1/xml2 在进行对象构造时允许初始化 dbuf 的参数
.新特性:http_header 类中的方法 set_url 增加参数 encoding,该参数决定是否对出现于 url 中的参数进行 url 编码
.新特性:dbuf_guard 类将容纳 dbuf_obj 的数组封装在链表中,以免该数组过大
.新特性:xml/xml1/xml2 类中的方法 update 允许返回剩余的 xml 数据
.新特性:json 增加对 double 类型的支持
.新特性:mime 类增加两个方法 get_plain_body/get_html_body 便于提取不同类型的
.新特性:Makefile 添加条件编译选项:允许在编译时以 make polarssl=on 方式将 POLARSSL 编译进去

.问题修复:thread 类中,在创建线程后对 thread_id_ 赋值时,可能会因为线程创建足够快且用户提前释放了线程对象而造成内存非法访问
.问题修复:http 模块设置的读超时与 stream 的读超时冲突
.问题修复:http_request 类的get_body方法中,对象 ps 为局部变量,出作用域后依然被使用而导致崩溃
.问题修复:string 类应该只检查空指针,而不应检查空串
.问题修复:mime::body_node 取正文有误
.问题修复:json_node::set_text 判断节点是否为叶节点的方法有误

四、参考链接:
oschina-git:https://git.oschina.net/zsxxsz/acl
github: https://github.com/zhengshuxin/acl.git
sourceforge:http://sourceforge.net/projects/acl/
blog: http://zsxxsz.iteye.com/

acl - acl3.2.0.rc4 release

Published by zhengshuxin about 8 years ago

fixed some compiling warning on MACOS.

acl - acl3.2.0.rc3 release

Published by zhengshuxin about 8 years ago

In this version, memory will be decreased when creating fiber object by using virtual memory. (using malloc than calloc when creating buffer for fiber stack.

  • zsx
acl - acl3.2.0.rc2 release

Published by zhengshuxin about 8 years ago

This a performance improvment of event_epool_thr.c in acl by decreasing calling epoll_ctl.

acl - acl3.2.0.rc1 release

Published by zhengshuxin about 8 years ago

In this version, except there're some bugs been fixed, the main change is that the network fiber (that's also named coroutine) library in lib_fiber was added into the acl project. The network fiber is a greate changing for the network application. The c/c++ programmers can easily write a high cocurrent and excellent performance services by using lib_fiber in acl.

  • zsx
acl - acl3.1.5 released!

Published by zhengshuxin over 8 years ago

acl 3.1.5 版本发布了,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 升级的主要内容有:线程池服务器模板在独立运行模式及框架运行模式保持一致,redis_builder 集群管理工具功能更为强大,邮件解析库性能提升;修改一些 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 解析库采用有限状态机方式解析数据,处理方式更为灵活

示例:
1、lib_acl/samples: 该目录下有大量的基于 lib_acl C 库的示例
2、lib_protocol/samples: 该目录下有大量的基于 lib_protocol C 库的示例
3、lib_acl_cpp/samples: 该目录下有大量的基于 lib_acl_cpp C++ 库的示例

应用:
1、app/redis_tools: 该目录下为 redis 集群管理、监控及智能创建工具
2、app/wizard:用来自动生成 acl 服务器框架的向导程序
3、app/master_dispatch:用于管理和分发客户端连接的服务程序
4、app/gid:用来产生全局唯一整型 ID 的服务程序及客户端库
5、app/wizard_demo:为一些服务器测试程

一、基础 C 库:lib_acl
.新特性:增加函数 acl_check_socket 用来检查所给套接字是否为监听套接字
.新特性:events_select.c/events_poll.c/events_kernel.c,内部自动判断是否为监听描述符,从而降低了事件模块与流模块之间以及其它模块之间的耦合度
.新特性:acl_vstream.c,函数 acl_vstream_fdopen 会自动判断所给描述符是否为监听描述符,避免了用户输入的参数 fdtype 的非法性
.新特性:acl_default_malloc.c,函数 acl_default_realloc 当输入的地址为 NULL,则自动切换至 acl_default_malloc 过程
.新特性:acl_vstring.c 真正支持限定最大使用空间功能
.新特性:acl_vstring.c 增加了 acl_vstring_mmap_alloc,用于支持以内存文件映射方式管理内存
.新特性:acl_vstring.c 以内存映射文件方式管理内存同时支持 UNIX/WINDOWS
.新特性:acl_xml/acl_xml2 增加函数接口,允许以文件流为创建 xml 节点的文本
.新特性:acl_inet_listen.c 在创建监听描述符时支持使用 SO_REUSEPORT, TCP_FASTOPEN 以提升 TCP 的处理性能(此两个特性均需要内核支持,同时 TCP_FASTOPEN 还需要在编译 lib_acl.a 时定义预编译条件:USE_FASTOPEN)
.新特性:acl_threads_server.c 服务器模板增加了几个接口
.新特性:acl_threads_server.c 支持 WINDOWS 平台,同时支持 daemon 模式及独立运行模式

.问题修复:acl_xml_parse.c/acl_xml2_parse.c/acl_xml_util.c/acl_xml2_util.c, 修复了当数据节点为 META, COMMENT, CDATA 时解析与创建 xml 对象时的 BUG
.问题修复:acl_multi_server.c/acl_single_server.c/acl_trigger_server.c,在将监控监听套接口的读事件时,应该调用 acl_event_enable_listen,而不是调用
.问题修复:acl_vstream.c 加强了 fp->read_cnt < 0 时的安全处理
.问题修复:acl_threads_server.c 在 daemon 模式下当只监听一个端口时,控制服务器 acl_master 不会传递 -s 参数,应该 socket_count 值初始化为 1
.问题修复:acl_vstream_net.c 中的函数 udp_read 应该设置 read_ready = 0, 否则当该 UDP 对象置入 event 事件循环时,会造成无用的事件触发
.问题修复:acl_threads_server.c 中的函数 dispatch_receive 是通过调用 acl_read_fd 直接从套接字中读取数据的,此时应该将 conn->read_ready 标志位清0, 否则会再次引发读操作,同时将该套接字设为非阻塞模式,以免阻塞主线程
.问题修复:acl_vstring.c 中没有针对 fd 进行初始化,这样当释放 ACL_VSTRING 对象时,会误判该对象创建在 mmap 上,从而会导致内存泄露
.问题修复:acl_vstream.c 中针对 stdin, stdout, stderr 需要做特殊处理

.性能:优化 acl_vstream.c 中 acl_vstream_read 函数的读性能, 同时兼顾大数据读取与小数据读取的性能问题

二、lib_protocol 库
.问题修复: http_hdr_req.c 中分析 url_part 有误

三、lib_acl_cpp 库
.新特性:mime.cpp, mime_head.cpp 支持更多的 Content-Type 类型
.新特性:db_handle/db_mysql 类在进行查询前优先释放上次的查询结果,以免使用者忘记释放而造成内存泄露
.新特性:增加类 db_guard 用于自动释放从数据库连接池中获取的连接对象
.新特性:fstream 类中增加了方法 remove 用于删除文件
.新特性:redis 库增加了出错日志输出,便于运行时进行信息调试
.新特性:HttpServlet 类增加了请求/响应成员函数(req_/res_),以便于将读取 HTTP 请求数据体分离
.新特性:xml/xml1/xml2 支持使用 dbuf_guard 会话内存池来创建临时对象, 从而提升了内存使用效率
.新特性:string 类支持内存映射文件方式管理内存,从而可以支持更多的内存空间
.新特性:session/redis_session/HttpSession 会话类增加功能接口
.新特性:xml/xml1/xml2 增加方法,允许将输入流中的内容作为 xml 节点的文本内容, 这对于当文本内容非常大时比较有用
.新特性:db/query 类增加了创建 sql 的接口 create
.新特性:HttpServletRequest::getParameter 在查找参数时允许不区分大小写
.新特性:queue_file::create 在产生唯一 ID 时,可以明显区分出进程号以便于调试检查当前队列文件所属的进程
.新特性:redis_command 类支持直接组装 redis 协议方式
.新特性:redis_server 类增加接口 info 方便提取服务器配置信息
.新特性:redis_command::run 中当发现 used_ > 0 时会强制调用 clear 来释放上次操作时临时创建的内存,以免用户反复使用该命令时忘记调用 clear

.问题修复:db_mysql.cpp 中调用 _mysql_open 时如果出错记日志时应判断每个参数是否为 NULL
.问题修复:connect_manager 类少两个设置函数 set_check_inter/set_idle_ttl
.问题修复:charset_conv 类中的方法 update,当 m_addInvalid 为 false,应该过滤掉无效的字符
.问题修复:zlib_stream 类判断剩余空间的方法应与 string 类匹配
.问题修复:json_node::is_array 判断方式有问题
.问题修复:redis_client_cluster 类中的 set_password 方法在设置集群中节点密码时,该方法的调用与添加集群节点的方法(set)与顺序相关,容易造成误操作导致密码设计无效
.问题修复:json 类中的 reset 方法在重置 json 对象时,因为 json 的 C 库内部会重建 root 节点,所以需要以 json 类中重新指定 root 节点
.问题修复:session::set_ttl 针对 redis 缓存时有问题,去掉了针对 sid_saved
的判断

.性能:mime_state_parse.cpp 中的 mime_bound_body 函数优化了处理大邮件的性能
.编译:使用预编译,优化 g++ 编译速度

四、参考链接:
oschina-git:https://git.oschina.net/zsxxsz/acl
github: https://github.com/zhengshuxin/acl.git
sourceforge:http://sourceforge.net/projects/acl/
website: http://zsxxsz.iteye.com/

acl - acl3.1.5 rc2 release

Published by zhengshuxin over 8 years ago

acl3.1.5 rc2 release
add acl_argv_quote_split

acl - acl3.1.5 rc1 release

Published by zhengshuxin over 8 years ago

acl3.1.5 rc1 release

acl - acl3.1.4.4 released!

Published by zhengshuxin almost 9 years ago

acl - acl3.1.4.3 released!

Published by zhengshuxin almost 9 years ago

Package Rankings
Top 5.64% on Proxy.golang.org
Related Projects