阅读更多
acl 3.0.11版本发布了,acl 是Advanced C/C++ library 的简称,主要包括网络通信库以及服务器框架库等功能;在 acl 首次参加的“2013年度中国优秀开源项目评比”中,也获得了366票的支持,排名 26。

项目地址:https://sourceforge.net/projects/acl/

acl 包括以下丰富的常用函数库:

  • 常见网络应用库: SMTP 客户端库/PING 库/memcache 客户端库/handlersocket 客户端库/beanstalk 客户端库
  • HTTP 网络库:HTTP 客户端/服务端库,C++版 HttpServlet 类,HTTP COOKIE/HTTP SESSION 等
  • 邮件解析库:mime解析库/RFC2047/RFC2048/mime base64/mime qp/mime uucode 等
  • 网络通信库:阻塞/非阻塞网络 IO 库
  • 服务器框架:包括进程池模式、线程池模式、非阻塞模式及触发器模式
  • 事件引擎:支持 select、poll(for unix)、epoll(for linux)、kqueue(for bsd)、devpoll(for solaris)、iocp(for win32)、win32 窗口消息(for win32)事件引擎
  • 通用连接池库:高效的连接池基础类库,支持丰富的功能
  • 数据库客户端库:对原生的数据库客户端库进行了二次封装,使编程更为简易,功能更为丰富
  • xml/json 流式解析库:区别于网上其它已有的 xml/json 解析库,acl 中的 xml/json 解析库采用有限状态机方式解析数据,处理方式更为灵活
此次新版发布除了修复了已知的 BUG 外,主要提供了通用的连接池基础库,内容如下:

1.  lib_acl

  • feature:master 框架允许以非 root 身份启动,需要用户修改 acl_master 的配置文件 main.cf,添加 set_ugid = 0,默认情况下该值为 1
  • bugfix:acl_json_util.c::json_escape_append, acl_json_parse::json_tag中需要对特殊控制字符做转义处理(目前在解析时暂不支持 \u 的情况)
  • bugfix:acl_json_util.c::json_escape_append 中不应将 "{}[]" 这些字符作为特殊字符而转义
  • event:events_select/events_poll/events_kernel/events_iocp 使事件引擎的时钟更为精确
  • bugfix:在 iocp 方式下不能通过 getpeername/getsockname 获得远程/本地的地址,通过在 acl_vstream_accept_ex 中添加 setsockopt 调用,将监听套接字中的一些属性拷贝至客户端连接中解决了此类问题

2.  lib_protocol

  • warning:http_hdr_req.c::http_hdr_req_new() 内部使用了线程局部变量,当用 valgrind 检查时会报内存泄露警告,通过在主线程中将其释放去掉了此警告
  • bugfix:http_hdr_req.c->http_hdr_req_create() 分离 URL 时有误
3.  lib_acl_cpp

  • bugfix:memcache 类中当连接异常中断重试时会因请求数据被清掉而出错,原因是请求与响应共用同一个缓冲区所致,现将请求缓冲区与响应缓冲区分开
  • samples:增加了测试 http_request_pool 的例子 samples/http_request_pool
  • samples:增加了测试 memcache_pool 的例子 samples/memcache_pool
  • feature:增加了 HTTP 客户端连接池类 http_request_pool;同时将http_request类变为 connect_client 的子类
  • feature:memcache 增加了连接池类 memcache_pool;同时将类 mem_cache 改为memcache
  • mem_cache:调整了构造函数接口,使之更容易使用
  • feature:添加了通用的客户端连接池管理对象:connect_client、connect_pool、connect_manager,这些类均为纯虚类,但子类只需要实现很少的几个虚函数便可获得功能丰富的连接池管理功能
  • feature:db_pool 支持动态将空闲时间过期的数据库连接释放掉,从而减少对后端数据库的压力
  • bugfix:db/db_mysql.c 在打开 mysql 时原来的实现中,如果需要设置字符集,则会导致崩溃,原因是设置字符集必须是在连接打开之后设置,原来的做法是在连接打开前设置的
  • bugfix:string::split/split2 内部在调用 acl_argv_split 后没有调用acl_argv_free 释放动态分配的内存
1
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

Global site tag (gtag.js) - Google Analytics