Skip to content

Releases: acl-dev/acl

acl 3.5.1 released!

09 Jan 02:54
Compare
Choose a tag to compare
  1. many optimization for mobile platforms such as Android and IOS;
  2. support mbedtls in ssl module;
  3. add more feature for aio module;
  4. many bug fixed and many features added.

acl3.5.0 released!

09 Mar 12:25
Compare
Choose a tag to compare

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

本次升级为大版本升级,主要有以下改进:
1、网络协程库功能更加丰富、更加稳定,具备应用于复杂业务场景的能力;
2、完全支持 IPV6,内部自动识别 IPV4/IPV6 环境并自动适配;
3、Redis 客户端库支持 Redis5 stream 功能;
4、支持使用 Android Studio 3.3.2。
此外,还包括大量的新功能特性及问题修复。具体内容如下:

一、基础 C 库:lib_acl
.feature: acl_scan_dir.c 在扫描过程中为每个目录添加目录属性,以便于应用可以获得目录的访问时间等属性
.feature: acl_scan_dir.c 中在扫描目录过程中,如果遇到出错情况则会继续扫描下一个,以免提前结束扫描
.feature: acl_scan_dir.c 增加扫描过程中删除空目录功能,例子参照:scan_rmdir
.feature: acl_udp_server.c 增加配置项 udp_fatal_on_bind_err 来决定当无法绑定地址时,进程是否需要自动崩溃
.feature: acl_aio_server.c, acl_single_server.c, acl_threads_server.c, acl_trigger_server.c, acl_udp_server.c 支持进程崩溃时所产生 core 文件的大小,以及进程退出前可禁止产生 core 文件
.feature: acl_udp_server.c 可以通过配置项 master_reuseport 决定是否需要绑定地址
.feature: acl_bind_udp() 在绑定 UNIX 域套接口时不再需要有 @udp 后缀,内部会自动进行判断是否是 UNIX 域套接口
.feature: 新增函数 acl_socket_alive 用来检测所给套接字是否正常
.feature: 当创建监听套接口时通过新增标志位 ACL_INET_FLAG_EXCLUSIVE 来控制是否禁止地址复用,默认是允许地址复用
.feature: acl_cache2.c 中 acl_cache2_enter 在添加新元素时,如果缓冲区满则按 LRU 算法将最老的元素删除,以保证缓冲区空间大小
.feature: 网络通信及域名解析全面支持 IPV6!

.bugfix: acl_threads_server.c,在 client_wakeup() 中调用 acl_access_permit() 时如果该函数返回 0 后再调用 ctx->serv_close() 时会导致服务崩溃,原因是调用 serv_close 中的参数顺序不对
.bugfix: acl_udp_server.c 中 server_binding 绑定失败时不应放在事件监控中
.bugfix: acl_json_utio.c, acl_json_build() 当数组成员为字符串类型时,应允许空串的存在
.bugfix: acl_udp_server.c, server_open() 在打开多个流对象时未将数组索引递增,导致无法绑定多个地址
.bugfix: acl_inet_connect.c 中 acl_inet_connect_ex 函数不支持地址为域名
.bugfix: acl_host_port.c 中不支持只有 port 的解析方式
.bugfix: acl_cache2.c 中 acl_cache2_update 的过期时间添加有误
.bugfix: acl_ifconf.c 中的 acl_ifconf_search 修正几处地址匹配模式问题
.bugfix: acl_json_parse.c 在分析 Json 数据时,针对字符串对象,如果字符串值的开始部分为空格,则会被过滤掉,此问题已修复
.bugfix: acl_json_parse.c 不能处理空数组的情况
.bugfix: acl_write_wait.c 中使用 poll 方法时,针对 POLLHUP, POLLERR 应直接返回正常,让 write 函数触发异常行为

二、基础网络协议库:lib_protocol

三、c++ 库:lib_acl_cpp
.feature: scan_dir.cpp 增加删除空目录功能
.feature: thread::start() 增加同步启动线程的控制参数;在异步创建线程时,如果创建者想通过 thread::thread_id() 获得新线程的线程 ID 号时,原来的方式还有等待过程导致 1 秒延迟返回,现在通过 tbox 方式可以"立即"获得线程 ID 号
.feature: http_request/http_client 类以 socket_stream 为参数的构造方法中,增加控制参数 stream_fixed,决定当对象销毁时是否自动将 socket_stream 对象一起销毁
.feature: connect_pool 支持放置非自己创建的连接对象,同时支持在 peek 连接时,仅从已有的连接中提取而不是创建新的连接
.feature: connect_manager 连接池管理器可以更好地支持协程的多线程模式,使用者仅需调用 connect_manager::bind_thread(true) 即可
.feature: redis_stream 功能模块支持 Redis5 stream 功能
.feature: master_thread.cpp 增加 task_qlen() 方便用户获得当前线程池任务队列中积压的任务数; 增 threads_pool() 方法用来获得 lib_acl C 库中的线程池句柄
.feature: redis_client, redis_client_pool 在非集群模式下创建连接时自动选择db
.feature: websocket::send_frame_data 在被循环调用时需检查长度是否一致,且需要根据实际写入的帧长度设置掩码
.feature: server_socket 构造方法分开多个,避免使用时产生歧义
.feature: master_udp 增加 proc_on_unbind 虚方法,用于当套接口关闭前的回调
.feature: acl::string 添加 end_with 方法
.feature: server_socket 类的构造函数中新增标志位 OPEN_FLAG_EXCLUSIVE 用来控制创建监听套接口是否禁止地址复用,缺省是允许地址复用
.feature: acl::socket_stream 增加 sock_type 来判断 socket 类型
.feature: 添加 sqlite_cursor 类,从而使 db_sqlite 支持 Sqlite 游标功能
.feature: 添加 token_tree 类,该类封装了 C 版的 256 叉匹配树算法
.feature: tbox 模板类允许传递空消息对象
.feature: acl::string 支持更多与 std::string 之间的互相操作
.feature: acl::fstream 增加文件锁方法
.feature: tbox 类完全由 C++ 模板类实现,不再依赖于 C 版中的消息队列,代码更简洁清晰
.feature: thread_cond 类中的 wait 方法参加参数 locked,内部会先判断该参数决定是否需要加锁
.feature: connect_monitor 类增加三个虚方法:on_connected, on_refused, on_timeout
.feature: redis_client_cluster 增加新方法 get_password/get_passwords
.feature: connect_manager 增加 check_idle 用来检测并释放过期空闲连接

.bugfix: scan_dir.cpp 当扫描的节点为目录时给的路径有误
.bugfix: connect_manager::check_idle() 当 pools_size 为 0 时应该直接返回
.bugfix: websocket::read_frame_data 被循环调用时,掩码使用方式有误
.bugfix: WebSocketServlet.cpp 中有多个成员变量未初始化
.bugfix: master_aio/master_threads 在添加 server_socket 时,应该加锁
.bugfix: master_udp::service_on_bind 被多线程同时调用时,需要对成员变量 sstream_ 加锁保护
.bugfix: db_mysql.cpp, 如果在执行操作的时候,发现跟mysql已经断开链接了,就会重连,万一在连接时间内都没有重连成功,就会释放掉MYSQL*指针,造成这个连接对象永不可用了。因为dbmysql::sane_mysql_query函数判断conn_为null就直接返回了
--- young_hb
.bugfix: gson_helper.ipp 在处理空数组时有误
.bugfix: json 序列化工具对 double/float 类型且值不带小数部分时的支持不够完善,通过在 acl::json_node::is_double 增加针对整数的支持得以解决
.bugfix: acl::HttpServlet 当 session 对象内部创建时,需在析构函数里将其释放,否则会造成内存泄露
.bugfix: acl::thread 线程对象被创建时,默认采用非分离状态,以便于和操作系统的 API 行为相近,原来采用的是分离状态
.bugfix: redis_key::renamenx 返回值类型有误

四、网络协程库:lib_fiber
.feature: 增加 tcp_keeper 类用来预创建 TCP 连接及连接保持,减少 TCP 三次握手造成的时延影响
.feature: 添加 fiber_cond.c 可用于协程和线程之间的条件变量
.feature: fiber_event.c 增加控制参数,可用于协程之间、线程之间及协程与线程之间的互斥
.feature: fiber_server.c 支持所生成 core 文件的大小及进程退出时不产生 core
.feature: 增加 fiber_tbox 类,可以在协程之间、线程之间及协程与线程之间传递对象

.bugfix: acl_fiber_cond.c 中 acl_fiber_cond_timedwait 和 acl_fiber_cond_wait 在释放 fbase 对象时,必须在调用 acl_fiber_event_wait 之前,否则会引起句柄被
提前关闭问题
.bugfix: acl_fiber_cond.c 中如果多个线程调用同一个条件变量的的 acl_fiber_cond_timedwait 方法时,可能会存在超时值失效的情况
.bugfix: fiber_server.cpp 当有连接未断开时,进程无法正常退出
.bugfix: fbase_event.c 中 fbase_event_wakeup/fbase_event_wait IO 如果遇到中断信号,应该需要重启 IO 过程
.bugfix: fiber_event.c 的方法 acl_fiber_event_notify 中需要用线程锁对等待队列(event->waiters)和原子数(event->atomic)进行保护,否则中间会有时间间隙,导致加锁等待者(调用acl_fiber_event_wait)永久等待
.bugfix: fiber_event.c 修复锁竞争问题
.bugfix: fiber_event.c 中的锁存在几处锁竞争失效问题
.bugfix: event_iocp.c 中的 iocp_check 方法中的一处断言有问题 -- [email protected]
.bugfix: getaddrinfo.c 修复一处 IPV6 相关问题
.bugfix: 使用 poll 方法时,在初始化参数时不需要设置 POLLERR, POLLHUP
.bugfix: acl_fiber_gethostbyname 在协程模式下是不安全的,会存在多个协程共用一个线程局部变量的问题,从而导致内存解析失败,解决方式是使用协程局部变量

release 3.5.0-rc3

08 Mar 03:25
Compare
Choose a tag to compare
release 3.5.0-rc3 Pre-release
Pre-release
  1. Build ok for VC 2012

release 3.5.0-rc2

07 Mar 14:14
Compare
Choose a tag to compare
release 3.5.0-rc2 Pre-release
Pre-release
  1. Fixed bugs in lib_fiber
  2. Build ok on Android Studio 3.3.2

release 3.5.0-rc1

16 Dec 13:13
Compare
Choose a tag to compare
release 3.5.0-rc1 Pre-release
Pre-release
v3.5.0-rc1

prepare for releasing acl 3.4.2 version!

acl.3.4.1 release!

07 May 07:09
Compare
Choose a tag to compare
  1. bugfix: redis_pubsub.cpp has memory corrupt bug.

acl.3.4.0 release!

29 Apr 13:15
Compare
Choose a tag to compare

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

本次升级为大版本升级,主要有以下改进:
1、重构网络协程库,支持更多的操作系统平台(Linux/FreeBSD/MacOS/Windows),且支持更多网络事件引擎:epoll/select/poll/kqueue/iocp/Win32 GUI;
2、acl 服务容器从基础库中独立出来,形成独立的模块;
此外,还包括大量的新功能特性及问题修复。具体内容如下:

一、基础 C 库:lib_acl
.feature: feature: 提供 socket IO 读写注册接口,允许使用者注册 IO 过程,从而使 ACL_VSTREAM 流针对网络 IO 的读写过程使用用户注册的 API 过程
.feature:aio 模块增加 acl_aio_last_nready,event 模块增加 acl_event_last_nready 用来表明一次事件循环被触发的事件次数
.feature: acl_mbox.c 支持采用 eventfd 句柄进行 IO 通知
.feature: acl_udp_server.c 支持绑定 UNIX 域套接口
.feature: net 中的 udp 模块支持绑定 UNIX 域套接口传输数据
.feature: acl_argv.c 增加 acl_argv_set 用于替换指定下标位置的值
.feature: acl_udp_server.c 支持 IP 地址自动发现功能,即当网卡地址发生变化时,会自动添加或删除监听的地址
.feature: acl_dlink.c 二分块算法支持添加负整数
.feature: master 服务器模板支持收到 SIGTERM 信号后的后续处理过程
.feature: acl_mbox.c 中的 acl_mbox_read 函数读超时单位由秒级调整为毫秒级
.feature: 开放 acl_read_xxx_wait 接口,以允许毫秒级读超时等待
.feature: acl_inet_listen/acl_inet_bind/acl_vstream_listen_ex 增 flag 标志位
.feature: master 服务器框架及服务器模板增加配置项 master_reuseport 及 master_nonblock,master_fastopen 以允许用户可以通过配置文件来设置监听方式
.feature: acl_udp_server.c/acl_threads_server.c/acl_aio_server.c, acl_single_server.c/acl_trigger_server.c,增加方法用于获得当前服务的配置文件路径
.feature: master/template/acl_udp_server.c 增加配置项,允许创建的线程为非“分离”模式
.feature: master/template 下所有服务器模板支持获得 SIGHUP 信号后的回调过程
.feature: event_kernel.c 中的函数 event_new_kernel 增加 acl_close_on_exec 控制,防止子进程继承 epoll/devpoll/kqueue 句柄
.feature: 增加 acl_sane_bind.c 文件,将地址绑定操作形成单独的方法
.feature: 增加 acl_host_addrinfo 方法,支持通用的域名解析
.feature: acl_udp_server.c 支持 daemon 及 alone 两种运行模式
.feature: acl_udp_server.c 支持绑定模糊匹配的地址
.feature: acl_master 服务器框架允许启动时没有应用服务程序,以便于用户动态添加
.feature: ACL_TOKEN 对象增加针对 acl_foreach 的支持,可以遍历所有的关键词
.feature: acl_token_tree.c 增加 acl_token_tree_word_remove 方法
.feature: acl_master 支持 UDP 方式下的 SO_REUSEPORT
.feature: acl_master 服务器框架支持在 fork 子进程后, execvp 应用程序前切换子进程运行身份,此功能将帮助使用 go 语言编写的应用服务切换运行身份。
.feature: add inet_ntop/inet_pton for vc2003

.bugfix: acl_xml_parse.c 宏 IS_CDATA 判断有误,--- by https://gitee.com/ghostshy
.bugfix: acl_read_wait.c 在调用 epoll 前无需设置 EPOLLHUP | EPOLLERR 标志,该标志属于返回值
.bugfix: acl_inet_connect.c 当连接失败时因为调用了 acl_socket_close 在 WIN 平台上会重置系统错误号
.bugfix: acl_read_wait.c/acl_write_wait.c 调用 poll API 时,POLLHUP | POLLERR 不应做为输入参数
.bugfix: 当用 acl_vstream_fdopen 打开文件时,不应再判断是否是 SOCKET 类型,否则会将文件句柄类型当作 SOCKET 类型,从而引发问题
.bugfix: 重构 acl_ifconf.c 中的函数 acl_ifconf_search,该函数存在一些兼容性问题
.bugfix: 修复 acl_udp_server.c 中网卡 IP 地址变化自我感知问题
.bugfix: acl_ifconf_search 配置地址时有误
.bugfix: acl_mylog.c 当 fork 子进程时,可能会造成死锁问题
.bugfix: acl_events.c 中 event_init 函数 eventp->timer_keep 为函数指针,不应设为 0,否则会引起 acl_event_keep_timer 函数崩溃
.bugfix: acl_udp_server.c 当收到 SIGHUP 信号后通过管道反馈给 acl_master 时,所传递的进程号有误
.bugfix: acl_dlink.c 二分块算法当添加两个连续的数据块时,应该进行合并
.bugfix: acl_mylog.c 内部的线程锁采用递归锁,否则,当记日志时收到信号再记日志时会造成死锁
.bugfix: acl_aqueue.c 中的 acl_aqueue_pop_timedwait 函数计算超时时间方式有误
.bugfix: acl_host_port.c->host_port 在 windows 平台下的解析有误
.bugfix: acl_aio_server.c/acl_threads_server.c 在 windows 下有误
.bugfix: acl_threads_server.c 中 thread_callback 在调用回调函数 serv_timeout 时的参数顺序是错误的。
.bugfix: acl_atomic_int64_fetch_add/acl_atomic_int64_add_fetch 实现有问题
.bugfix: acl_master 当 master_prefork > 0 时,若停止一个服务模块或将该服务模块的监听地址改变后 reload acl_master 则 acl_master 会产生崩溃,该问题
已经修复
.bugfix: acl_pthread.c 中 acl_pthread_setspecific 存在 bug
.bugfix: acl_mylog.c/private_stream.c 中的内存存在非法释放

二、基础网络协议库:lib_protocol
.feature: 针对 HTTP 请求 uri 中的 "?" 问号被转义成 "%3F" 的情况,可以做兼容性处理
.feature: http_hdr_res.c 中的函数 http_hdr_res_parse 取消了对 http_status 的检查,以便于应用使用自定义状态码

三、c++ 库:lib_acl_cpp
.feature: 针对 HTTP 请求 uri 中的 "?" 问号被转义成 "%3F" 的情况,可以做兼容性处理
.feature: 添加 diff_xxx 类对象集,用来快速对比两个集合的差集
.feature: atomic_long 类增加赋值拷贝重载功能,同时禁止构造拷贝功能
.feature: 添加 redis_role、redis_sentinel 类
.feature: server_socket 类支持 SO_REUSEPORT
.feature: aio_handle 类增加方法 last_nready 用来获得本次事件循环触发的事件数
.feature: redis_cluster 功能类支持 redis.4.x.x
.feature: 增加 tbox 类,用于在多线程环境中传递消息对象
.feature: 添加新类 event_mutex,该类以原子操作 + IO 事件方式支持线程级或协程级的互斥功能
.feature: thread_mutex 将是否创建递归锁做为构造参数选项
.feature: 增加 trigger.hpp 文件,用于按时间进行定时触发操作
.feature: 在 stdlib/ 目录下新增 bitmap 类,用于位映射操作
.feature: 增加原子操作类 atomic
.feature: 增加了 tcp 连接池通信模块
.feature: polarssl_conf & polarssl_io 两个类支持动态加载 polarssl 动态库
.feature: redis_hash 类针对 hmset 方法增加几种实现,以方便用户使用
.feature: master_proc/master_aio/master_threads/master_udp/master_trigger 增加 get_conf_path 方法用于获得当前服务器的配置文件路径
.feature: 所有服务器模板支持 SIGHUP 信号回调处理过程
.feature: db_sqlite 类增加了事务处理接口 --- by lindawei [email protected]
.feature: 添加 WebSocketServlet by "fuwangqin" [email protected]
.feature: ostream::write 支持缓冲式写数据
.feature: db_pgsql.cpp 支持以 UNIX 域套接口方式连接 postgresql 数据库
.feature: 增加针对 postgreqsl 的支持

.bugfix: acl::thread 对象被重复使用时(即线程退出后再次调用 start),需要将 thread_id_ 置 0 --- by [email protected]
.bugfix: thread_cond.cpp 中的方法 wait 内部计算时间有误
.bugfix: serialize/gsoner.cpp 针对 std::map 类型的数据对象不支持 optional
.bugfix: server_socket 中的 buf_ 为固定 64 字节大小,对于 UNIX 域套接口是不够用的,将其类型改为 acl::string
.bugfix: redis_client.cpp 中当连接需要认证时,如果因网络或其它原因可能会造成认证死循环状态,通过增加标志位成员(authing_) 以防止循环认证
.bugfix: redis_client_cluster::set_all_slot 方法不支持连接认证功能
.bugfix: polarssl_conf.cpp 将库的初始化放在构造函数之外,以应对应用不同的使用方式
.bugfix: redis 模块中有些命令类对于二进制的数据支持存在问题
.bugfix: polarssl_conf.cpp 在动态加载 polarssl 库时,如果应用定义了全局的 acl::polarssl_conf 对象,则会因 polarssl_conf 类内部的 __polarssl_path 也是静态全局的,编译器在构建此两个对象时的顺序是先构造应用的 polarssl_conf 对象而后构造 polarssl_path,从而导致 polarssl_conf 在构造时会引起崩溃
.bugfix: string.cpp 中在重载 < 和 > 符号时,应取最小长度值进行比较,但 内部却误写成取最长长度进行比较,容易造成内存非法访问
.bugfix: redis_hash.cpp 中当调用 hmset 命令时有一处填写了错误的命令字
.bugfix: http_request.cpp 中的 reset 方法应该增加 header
.reset() 和 client
->reset(),否则会引起内存泄露
.bugfix: websocket::make_frame_header 中当 payload_len 为 126 时会遇到内存跨界问题 --- found by "lindawei" [email protected]
.bugfix: connect_manager::remove 中存在一处删除问题 --- "fuwangqin" [email protected]
.bugfix: gson_helper.ipp 中 gson 模板函数中当第二个参数为 std::list 或 std::vector 时,如果容器中元素中的成员为对象指针时会因浅拷贝的原因导致指针对象被二次释放的问题 -- "lindawei" [email protected]
.bugfix: query.cpp 中 escape 在转义时不应对 \r\n 进行转义

四、网络协程库:lib_fiber
.feature: acl 协程库可以运行在 MacOS 上了
.feature: fiber_server.cpp 支持协程调度时选择不同的事件引擎
.feature: 协程事件引擎增加针对 Winsock IOCP 的支持
.feature: 增加 API acl_fiber_schedule_init() 可以设置协程调度器为自启动模式
.feature: 增加 API acl_fiber_schedule_set_event() 可以显式地设置协程事件引擎
.feature: fiber_io.c 当没有监控网络句柄并且没有定时器任务时,该 IO 协程会自动退出
.feature: 协程模块可以支持 WIN32 窗口消息引擎,从而可以与界面编程无缝整合
.feature: acl_fiber_poll/acl_fiber_select 支持 win32 平台
.feature: 增加 kqueue 事件引擎以支持 FreeBSD,从而使 acl 协程支持 FreeBSD
.feature: fiber_event.c 新增同时支持协程/线程互斥的锁,性能可达千万级别 QPS
.feature: fiber.c, fiber_alloc 中需要增加针对信号的处理过程
.feature: EVENT::poll_list, epoll_list 可以采用 FIFO 或 STACK
.feature: hook sendfile/sendfile64
.feature: 添加 C++ 版本的协程定时器类 fiber_timer
.feature: fiber_server.c 当在独立运行时也可以通过配置文件指定 master_reuseport 选项
.feature: master_fiber 增加 get_conf_path, acl_fiber_server.cpp 中增加 acl_fiber_server_conf,此二方法用于获得当前的服务配置文件路径
.feature: master/fiber_server.c 中将 fiber_sleep 协程的栈大小允许受配置项控制;同时将内部的 STACK_SIZE 缺省值由 64 K 改为 128 K,该值也是用户级所创建
协程的栈缺省大小
.feature: fiber_server.c/master_fiber.cpp 支持 SIGHUP 信号回调过程
.feature: fiber_server.c 支持多线程运行模式
.feature: fiber_server.c 协程服务器模板增加了平滑退出机制

.bugfix: 当所有协程还未执行完毕而调用 acl_fiber_stop 时,则需要将缓存的协程对象及正在运行的协程对象的内存释放掉
.bugfix: acl_fiber_gethostbyname 在协程模式下是不安全的,会存在多个协程共用一个线程局部变量的问题,从而导致内存解析失败,解决方式是使用协程局部变量
.bugfix: 修复了 FreeBSD kqueue 的问题
.bugfix: event_epoll.c 的 函数 epoll_event_wait 中没有处理 EPOLLERR|EPOLLHUP 的错误情况,会导致程序进入死循环
.bugfix: event_select.c/event_poll.c 当没有网络句柄被监控时,应调用 Sleep,因为 Windows 下的 select/WSAPoll 不允许输入的句柄为空
.bugfix: event_poll.c 中应该处理异常情况(POLLERR | POLLHUP | POLLNVAL)
.bugfix: fiber_io.c, fiber_io_loop 中容易产生 32 位整数溢出问题,会导致定时器无法触发
.bugfix: fiber.c,__thread_fiber->switched 原来为有符号 int 型,有可能会因溢出问题造成协程调度出问题

acl.3.4.0 rc4 release!

25 Apr 07:51
Compare
Choose a tag to compare
Pre-release
  1. fiber module supports MacOS
  2. add xcode project for fiber module.

acl.3.4.0 rc3 release!

05 Mar 06:23
Compare
Choose a tag to compare
Pre-release
  1. seperate acl-tools from acl-master.
  2. merge source codes from libfiber.

acl.3.4.0 rc2 release!

03 Feb 14:39
Compare
Choose a tag to compare
Pre-release

acl fiber supports IOCP/WIN message now, and fixed some bugs known.