阅读更多

2顶
0踩

开源软件
acl 3.0.14 版本发布了。acl 是 one Advanced C/C++ library 的简称,主要包括网络通信库以及服务器框架库等功能,支持 Linux/Windows 平台;整个 acl 项目主要包含三个函数库:

  • lib_acl:纯C开发的最基础库,主要包含网络通信及服务器编程框架以及其它丰富的功能)
  • lib_protocol:包含 HTTP/PING/SMTP 通信协议的C语言实现
  • lib_acl_cpp:基于 lib_acl 及 lib_protocol 两个C库,提供了更为强大的编程接口及丰富的功能类
项目主页:https://sourceforge.net/projects/acl/
技术文章主页:http://zsxxsz.ietye.com/

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

  1. 常见网络应用库: SMTP 客户端库/PING 库/memcache 客户端库/handlersocket 客户端库/beanstalk 客户端库
  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 解析库采用有限状态机方式解析数据,处理方式更为灵活

本次 acl 升级除了一些 bug 修复外,主要优化了 ACL 中的网络服务器框架及网络通信库的性能,此外,修复了一些在 solaris(x86) 上的一些不兼容性问题。主要改进包括:

一、基础 C 库:lib_acl

  • 新特性:acl_json.c 增加了 acl_json_node_duplicate 用于复制一个 JSON 结点对象到一个新的 JSON 结点中;增加了 acl_json_create 用于根据一个 JSON 结点创建一个完全的 JSON 对象
  • 新特性:acl_json_util.c 增加了 acl_json_node_build 用于根据一个 JSON 结点生成 JSON 字符串
  • 性能优化:acl_vstream.c,__sys_read 函数中当流的 sys_read_ready 为 1 时,则不会调用系统 API select 判断超时过程,从而减少一次系统调用,因为 sys_read_ready 标志位会在事件模块(event_xxx) 中被设置
  • 性能优化:acl_aio_server.c, acl_ioctl_server.c 服务器模块参加了控制参数:master_status_notify,当启动多个子进程时,该参数决定是否向acl_master 主进程汇报子进程的状态,当 master_prefork 预启动参数打开且该值 > 1 时,将 master_status_notify 设置为 0,则子进程不再向 acl_master 主进程汇报状态,有助于减少 acl_master 主进程的负载
  • 性能优化:acl_vstream.c, 在 acl_vstream_readn 中,为减少 read 次数,当输入缓冲区较小时,则自动启用双缓冲读方式
  • 问题修复:acl_json_parse.c,json_val() 函数中没有针对转义内容做特殊处理
  • 问题修复:acl_vstream.c,在 acl_vstream_ctl 函数中,当控制参数为 ACL_VSTREAM_CTL_PATH 时,对 stream->addr_peer 的赋值有问题(此 bug 由高版本的 gcc4.8.2 检测出)
  • 编译:Makefile 支持 solaris 编译
  • 其它:去掉了 event 目录下的 events_kernel2.c 及 events_kernel3.c
  • 其它:acl_msg.c,在函数 acl_last_serror() 中分配的线程局部变量在主线程中无法被正常释放,会导致 valgrind 报错
二、网络应用协议库:lib_protocol

  • 问题修复:http_chat_sync.c,在函数 http_res_body_get_sync 中,当为 chunked 传输方式时,需要设置 ctx->chunk.chunk_oper = CHUNK_OPER_HEAD
  • 编译:Makefile 支持 solaris 编译
  • 其它:http_hdr_res.c/http_hdr_req.c,内部的线程局部变量无法在主线程中释放,会导致 valgrind 报警告
三、功能丰富的C++库:lib_acl_cpp

  • 新特性:新增加 event 模块,将 master_timer 定时器类改名为 event_timer 类放于 event 模块中
  • 新特性:在基类 master_base 中添加了方法 proc_set_timer 用于添加进程级别的定时器,(同时移除了 master_threads 子类中的 proc_set_timer 方法),这样 master_base 的所有子类 (master_threads, master_aio, master_proc, master_udp, master_trigger) 都可以添加进程级别的定时器
  • 新特性:master 模块增加了定时器类 master_timer
  • 新特性:json 类增加了以下功能函数:
  •                     a) 构造函数 json(const json_node&),可以根据一个 json 对象的某一个 json 结点创建一个新的 json 对象
                        b) duplicate_node 根据一个 json 对象的某个 json 结点复制一个新的 json 结点
                        c) to_string 新的将 json 对象转换为字符串的函数
  • 新特性:json_node 类增加了以下功能函数:
  •                     a) to_string 根据 json 结点生成 json 字符串的函数
                        b) set_tag 用来替换标签名
                        c) set_text 当 json 结点为叶结点时用来替换标签值
  • 新特性:http_header 类丰富了 set_url 及请求构造函数的参数类型,允许 URL 参数中含有请求参数,且内部会自动解析 url 中的主机名及参数
  • 新特性:http_header 类添加了请求参数添加方法:add_int 及 add_format
  • 新特性:http_header add_param 允许参数值为空指针或空串
  • 新特性:http_header::set_host 仅是将主机字符串添加至成员变量 host_ 中
  • 新特性:http_header::set_url 中允许添加类似于 http://www.test.com 的 url(即末尾可以没有 '/')
  • 新特性:http_client 类增加了 chunked 传输方式;
  • 新特性:http_request 类增加流式写函数:write_head/write_body;
  • 新特性:http_response 类增加了流式写数据方式
  • 新特性:HttpServletRequest 类增加了几个获取 HTTP 请求头参数的方法
  • 新特性:http_utils::get_addr 的 url 参数既可以是 HTTP 也可以是 HTTPS
  • 新特性:master_threads 模板支持新的定时器
  • 问题修复:connect_pool::put 在归还连接给连接池时,为了让过期连接尽快回收,需要调用 push_front,原来调用了 push_back
  • 问题修复:http_header.cpp,http_header::date_format 在 WIN32 编译出错
  • 问题修复:json.cpp, json::getElementsByTags() 内部未对空指针做判断
  • 问题修复:http_header.cpp, http_header::date_format 在 UNIX 平台下 gmtime 是线程不安全的,所以需要使用 gmtime_r
  • 问题修复:http_download.cpp 的构造函数中调用 ACL_SAFE_STRNCPY 时第三个参数给出错误的尺寸大小(此 bug 由高版本的 gcc4.8.2 检测出)
  • 问题修复:Makefile 支持 solaris(x86) 编译
  • 新增示例:samples/json2, 用于测试级联提取数据的例子
  • 新增示例:samples/ 目录下新增加了 json 测试用例 json3/json4
  • 示例:samples/master_udp_threads:该例子中的线程局部变量的静态用法 __thread 无法支持 solaris,改为动态方式使用线程局部变量方式
  • 注释:修正 connect_manager::init 原来错误的参数格式描述
  • 注释:消除了几个头文件中由 doxygen 检测出的错误注释
  • 其它:stream 模块的异步流部分,将 aio_timer_callback 等类声明从 aio_handle 类中移除成为独立的类
  • 其它:调整类 http_client 中的两个函数 get_respond_head  和 get_request_head 的返回值限制,去掉 const 限定词

技术博客:http://zsxxsz.iteye.com/
下载地址:http://sourceforge.net/projects/acl/
svn:svn checkout svn://svn.code.sf.net/p/acl/code/trunk acl-code
Github地址:https://github.com/zhengshuxin/acl
2
0
评论 共 2 条 请登录后发表评论
2 楼 sunbiaozj 2014-01-21 18:59
你好,请问ACL  支持路由转发吗?
有这样的应用场景,客户端(C#、J2EE),通过统一的AR(应用路由转发,支持负载均衡)到AS(应用服务),我想ACL肯定是包括AS部分的框架了,请问对AR这块可以支持吗?
另外在AR上支持哪些客户端api的接入(C#、Java?)
另外私人联系方式邮箱等方便说下吗?
1 楼 kongxuan 2013-12-09 12:31
C++的东西啊。。这里貌似很少见

发表评论

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

相关推荐

  • Python库 | phcli-3.0.14.tar.gz

    python库。 资源全名:phcli-3.0.14.tar.gz

  • MakeFile Implicit Rules,A Gift for Me(强大的MAKEFILE)!!!

    MakeFile Implicit Rules,A Gift for Me(强大的MAKEFILE)!!!  这几天在解决源代码编译时忽然遇到个问题,今天终于在网络上学习MAKEFILE资料后得到解决,在此与大家分享。  使用GCC开发的朋友是不是会常写MakeFile呀,一般来说COPY一个已经有的MakeFile,改一改加入自己的CFLAGS和OBJECTS就好了,其中有几行处

  • Linux下C++的通用Makefile与解析

    http://graybull.is-programmer.com/posts/37758.html 本文给出万能Makefile的具体实现,以及对其中的关键点进行解析。 号称万能Makefile,一统江湖。我对原版的Makefile做了些修改。首先揭开它的庐山真面目: #################################################### #

  • 从头开始写项目Makefile(二):隐含规则自动推导

    原文链接:添加链接描述 上一节的Makefile勉强可用,但还写的比较繁琐,不够简洁。对每一个.c源文件,都需要写一个生成其对应的.o目标文件的规则,如果有几百个或上千个源文件,都手动来写,还不是很麻烦,这也不够自动化啊。 这样,我们把生成.o目标文件的规则全部删除掉,就是这样一个Makefile文件: target_bin : main.o debug.o ipc.o timer.o tools.o —gcc -o target_bin main.o debug.o ipc.o timer.o tool

  • how to write a makefile

    makefile中的注释是以#号开头一直到行尾的字符,当nmake工具处理到这些字符的时候,它会完全忽略#号及全部注释字符。   在引用宏时只需在变量前加$符号,但是要注意的是,如果变量名的长度超过一个字符,在引用时就必须加圆括号()   configure是一个可移植的shell脚本,它检查编译环境以决定哪些库可用,所用平台有什么特征,哪些库和头文件已经找到等等。基于这些信息,它修改编译

  • makefile——rule概览

    1.makefile 的组成及作用 makefile由一组rule(规则)组成,规则的语法如下: obj1 obj2 objN: prerequisite1 prerequisite2 prerequisite3 prerequisiteN (tab) commands 一个规则由三部分组成 obj 即目标部分。 必要条件部分(或者说依赖,即生成目标文件的依赖文件)。 commands 从必要条件生成obj 需要执行的 命令。 这一组规则会生成一个叫dependency graph 的东西,可以翻译成

  • 网络与服务器编程框架库 acl_3.0.14发布

     acl 3.0.14 版本 (项目主页:https://sourceforge.net/projects/acl/,技术文章主页:http://zsxxsz.iteye.com/)) 发布了,acl 是 one Advanced C/C++ library 的简称,主要包括网络通信库以及服务器框架库等功能...

  • Python库 | skema-3.0.14.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:skema-3.0.14.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

  • Python库 | Pyrebase-3.0.14-py3-none-any.whl

    python库,解压后可用。 资源全名:Pyrebase-3.0.14-py3-none-any.whl

  • MakeFile _10.3 Variables Used by Implicit Rules

    10.3 Variables Used by Implicit Rules(潜规则。哈哈)The commands in built-in implicit rules make liberal use of certain predefined variables. You can alter the values of these variables in the makefile, wi

  • Linux - Makefile

    Makefile是什么? Makefile 可以简单的认为是一个工程文件的编译规则,描述了整个工程的编译和链接等规则。 其中包含了哪些文件需要编译、哪些文件不需要编译、哪些文件需要先编译、哪些文件需要后编译、哪些文件需要重建等等。编译整个工程需要涉及到的,在Makefile 中都可以进行描述。 换句话说,Makefile 可以使我们的项目工程的编译变得自动化,不需要每次都手动输入一堆源文件和参数。 以 Linux 下的C语言开发为例说明一下: 多个源文件编译生成一个文件,编译的命令如下所示: gcc

  • what is makefile?

    什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefi...

  • Python库 | huaweicloudsdkkafka-3.0.14b0-py3-none-any.whl

    python库,解压后可用。 资源全名:huaweicloudsdkkafka-3.0.14b0-py3-none-any.whl

  • Python库 | huaweicloudsdkcloudtest-3.0.14b0-py3-none-any.whl

    python库,解压后可用。 资源全名:huaweicloudsdkcloudtest-3.0.14b0-py3-none-any.whl

  • Python库 | eventy-3.0.14-py3-none-any.whl

    资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:eventy-3.0.14-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

  • archive_ Django Web框架 v3.0.14 [江西新余电信].zip.zip

    archive_ Django Web框架 v3.0.14 [江西新余电信].zip

  • Python库 | chaospy-3.0.14-py2.py3-none-any.whl

    资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:chaospy-3.0.14-py2.py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

  • thymeleaf-3.0.14.RELEASE-API文档-中文版.zip

    赠送jar包:thymeleaf-3.0.14.RELEASE.jar; 赠送原API文档:thymeleaf-3.0.14.RELEASE-javadoc.jar; 赠送源代码:thymeleaf-3.0.14.RELEASE-sources.jar; 赠送Maven依赖信息文件:thymeleaf-3.0.14.RELEASE.pom;...

  • Python库 | pyfaust-3.0.14-cp37-cp37m-manylinux1_x86_64.whl

    python库,解压后可用。 资源全名:pyfaust-3.0.14-cp37-cp37m-manylinux1_x86_64.whl

Global site tag (gtag.js) - Google Analytics