zoukankan      html  css  js  c++  java
  • acl 3.1.2版本发布,网络通信与服务器编程框架

    http://www.linuxdiyf.com/viewarticle.php?id=432478


    acl 3.1.2 版本发布了,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 库中几处 BUG,增加了对 redis cluster 管理命令的支持;对 redis 客户端库提供了英文注释;提供了用于创建与维护 redis 集群的工具 redis_builder;增加了针对集群消息队列 disque 的支持;通用连接池模块功能的完善。

    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_define_win32.h 中的 socklen_t 的定义原来使用宏定义 #define 方式,有时会因为有些版本的 VC 提供了此类型而导致编译报错,现在改为 typedef 定义方式

    二、lib_protocol 库
    .无

    三、lib_acl_cpp 库
    .新特性:redis_client_cluster 类支持静态初始化哈希槽与服务结点的对应关系,从而避免了运行时的重定向
    .新特性:新增加类 redis_cluster,支持官方新公布的 CLUSTER 指令集
    .新特性:增加了 redis_slot 类及 redis_node 类,方便对集群中的 redis 结点进行管理
    .新特性:redis_cluster 类中的 cluster_nodes, cluster_slots, cluster_slaves, cluster_info 方法返回组织好的结果集
    .新特性:connect_monitor 连接池自动检测类支持应用重载 IO 处理过程,从而可以面向更复杂的通信协议处理情况
    .新特性:增加了分布式消息队列 disque 的客户端库模块

    .性能提升:HttpServletResponse::write 当采用 chunk 传输时由原来的多次调用系统 API write 方式改为只调用一次 writev,从而减少了系统调用次数

    .问题修复:redis_command.cpp 中最后三个 get_strings 函数在取得 rr 下标时有误
    .问题修复:redis_cluster 类中的 reset 方法与基类 redis_command 中的方法重名,造成了命名污染,现将 redis_cluster 中的所有方法都加了前缀 cluster_
    . 问题修复:acl::redis 类因为是虚继承了 redis_xxx 类,所以无法通过这些类的构造函数将参数传递给基类 redis_command 的构造函数,必须在 acl::redis 的构造函数中显示地将参数传递给基类 redis_command 的构造函数
    .问题修复:redis_client::get_redis_string 当数据长度为 0 时会出现异常, 从而兼容 redis 是允许数据值为空串的情况
    .问题修复:redis_command.cpp 中的 run 方法在处理服务器返回的 ASK 响应后应该向目标服务器先发送 ASKING 指令
    .问题修复:redis_command 类中的方法 get_client_addr 当采用集群模式时不能取得当前所用连接的服务端地址
    .问题修复:samples/connect_manager,异步检测对象应该是局部的,不应与 monitor 绑定在一起,增加了 check_async 回调类
    .问题修复:类 aio_timer_callback 中的方法 set_time 中在给成员变量 present_ 赋值时,在 32 位系统下会造成计算结果值的整形溢出

    四、示例
    1、app/redis_tools/redis_builder:该工具用于创建与管理 redis 集群
    2、lib_acl_cpp/samples/redis/redis_cluster:该例子于用测试 redis 中的 CLUSTER 命令集

    五、参考链接:

    oschina git: https://git.oschina.net/zsxxsz/acl/
    download:http://sourceforge.net/projects/acl/
    github:https://github.com/zhengshuxin/acl

    来自:开源中国社区
    <script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
    阅读(163) | 评论(0) | 转发(0) |
    给主人留下些什么吧!~~
    评论热议
  • 相关阅读:
    php使用redis的有序集合zset实现延迟队列
    php使用redis的几种常见方式和用法
    redis缓存雪崩,缓存穿透,缓存击穿的解决方法
    php操作redis数据库方法总结
    mysql 悲观锁与乐观锁的理解
    OAuth2.0 协议的理解
    windows下的mongodb安装与配置
    node.js中对 redis 的安装和基本操作
    node.js中对 mysql 进行增删改查等操作和async,await处理
    node.js中 koa 框架的基本使用方法
  • 原文地址:https://www.cnblogs.com/ztguang/p/12648758.html
Copyright © 2011-2022 走看看