欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  资讯频道

跨平台网络通信与服务器框架 acl.3.1.1 版本发布

程序员文章站 2022-05-30 09:22:56
...

acl 3.1.1 版本发布了,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 升级的主要内容有:acl redis 模块完全支持集群版 redis3.0。除此之外,还包含一些小的功能改进与完善,以及一些 BUG 的修复。

acl 包括以下丰富的常用函数库:
1、常见网络应用库: SMTP 客户端库/PING 库/memcache 客户端库/handlersocket 客户端库/beanstalk 客户端库/redis 客户端库
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_msg.c 增加了函数 acl_msg_trace_enable 用来设置当写出错或警告类型的日志时是否记录函数的调用堆栈
.新特性:增加了 CRC17 的哈希算法 acl_hash_crc16

.问题修复:acl_master 服务器框架当设置了 master_prefork 后可能会导致master_maxproc 不起作用,原因是 master_avail.c 中的 master_prefork 函数的限制问题,现在修改 master_avail_event 函数,当 master_prefork 返回 0 时再判断是否还需要 fork 子进程;该 BUG 仅影响多进程服务器模板,对其它服务器模板(如:非阻塞、多线程 等)没有影响
.问题修复:acl_single_server.c 多进程服务器模板的空闲超时退出机制存在问题
.问题修复:acl_trace.c/acl_trace_info 中的变量 results 在调用系统的 backtrace_symbols() 函数后应该释放,否则会造成内存泄漏
.问题修复:acl_threads_server.c/acl_aio_server.c 当进程退出时,需要通知 acl_master 主进程自己当前不可用,同时需要关闭与前端 TCP 派发器(master_dispatch)的连接
.问题修复:修改 acl_read_wait.c/acl_write_wait.c, 在 WIN32 平台下调用 select 时不必检查 fd 与 FD_SETSIZE 的关系,因为 WIN32 下的 fd_set 结构定义及 FD_XXX 宏的实现原理与 UNIX 不同,并且 WIN32 下的 fd 是不连续的,有可能会出现非常大的值,所以其中检查 fd < FD_SETSIZE 有可能会导致崩溃,其实也完全没有必要检查

二、lib_protocol 库
三、lib_acl_cpp 库
.新特性:redis_command 增加了几个方便调用的方法,使用户可以通过 redis_command 类对象直接调用 redis_result 类对象中的方法
.新特性:redis 客户端库完善了针对集群版本 redis3.0 的支持
.新特性:redis 客户端集群版增强了针对服务器掉线的容错功能
.新特性:redis 客户端库提供了一个统一的类 redis,该类继承了所有的命令 redis 命令类,只需使用这一个类便可以执行所有的 redis 命令
.新特性:beanstalk 类增加了一些出错提示功能

.问题修复:连接池基础类 connect_pool 类中的函数 put 当参数 delay_destroy_ 为 true 时,若 count_ > 0 返回时没有对互斥锁 lock_ 解锁,从而会造成其它使用该 连接池对象的线程调用 put 函数加锁时永远等待
.问题修复:http_header 类中的方法 set_method(const char* method) 需要对 method_s 进行赋值
.问题修复:server_socket::open() 当用户输入的地址为 ip:0 时,需要重新调用 acl_getsocketname 来获得真正监听的地址
.问题修复:redis_command::scan_keys 内部在使用指针参数 count 时有问题

四、示例
1、samples/redis_cluster: 测试 redis 集群模式的例子
2、samples/redis: 增加了 redis, redis_cluster2 两个测试用例

五、参考链接:
download:http://sourceforge.net/projects/acl/
github:https://github.com/zhengshuxin/acl
国内镜像(oschina git):http://git.oschina.net/zsxxsz/acl
技术博客:http://zsxxsz.iteye.com/
QQ 群:242722074