1. XenForo 1.5.14 中文版——支持中文搜索!现已发布!查看详情
  2. Xenforo 爱好者讨论群:215909318 XenForo专区

新闻 acl 3.1.1 版本发布,跨平台网络通信与服务器框架 下载

本帖由 漂亮的石头2015-03-30 发布。版面名称:软件资讯

  1. 漂亮的石头

    漂亮的石头 版主 管理成员

    注册:
    2012-02-10
    帖子:
    486,020
    赞:
    46
    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::eek:pen() 当用户输入的地址为 ip:0 时,需要重新调用 acl_getsocketname 来获得真正监听的地址
    .问题修复:redis_command::scan_keys 内部在使用指针参数 count 时有问题

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


    五、参考链接:

    国内镜像(oschina git):http://git.oschina.net/zsxxsz/acl

    download:http://sourceforge.net/projects/acl/
    github:https://github.com/zhengshuxin/acl
    acl 3.1.1 版本发布,跨平台网络通信与服务器框架 下载地址
     
正在加载...