阅读更多

acl 3.0.22 版本发布了,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 升级的主要内容有:1、SSL 同时支持阻塞、非阻塞模式,2、线程池服务器模板更好地支持在线更新,3、TCP 派发器提供了管理接口用于状态汇报,4、工程文件整理。
 
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 解析库采用有限状态机方式解析数据,处理方式更为灵活

一、基础 C 库:lib_acl
.新特性:json 模块增加了构造布尔型和数值型的接口
.新特性:事件引擎模块可以区分 ACL_EVENT_ACCEPT/ACL_EVENT_CONNECT 与 ACL_EVENT_READ/ACL_EVENT_WRITE 事件类型
.新特性:acl_json_util.c 中增加了流式将 JSON 对象转为字符串的函数 acl_json_building,这样当 JSON 对象比较大时使用该函数可以有效防止要求系统分配非常大的内存空间而导致分配内存失败
.新特性:acl_pthread_pool.c 中增加了 acl_pthread_pool_idle,
acl_pthread_pool_busy 两个函数,分别用来获得当前线程池中的空闲线程数及繁忙线程数
.新特性: acl_threads_server.c 服务器模板当子进程退出时会优先调用应用回调函数,由应用回调函数优先决定是否退出
.新特性:acl_mystring.c 中增加了 acl_find_blank_line 函数,用来从给定数据中查找空行的位置
.新特性:acl_trace.c 中增加了 acl_log_strace() 函数用来将函数调用堆栈输出至日志文件中
.新特性:acl_trace.c 中的函数 acl_trace_info 增加了防止递归嵌套的功能
.新特性:acl_threads_server.c 当采用 TCP 连接分发方式时,增加了汇报给分发器的信息字段,以便于分发器根据这些字段决定分发的策略
.新特性:acl_vstream.c 中循环写函数(loop_writen)支持超时写功能
.新特性:acl_msg.c 中的 acl_msg_error/warn/fatal/panic 支持记录函数调用堆栈

.性能:acl_vstream.c 优化了读 (__sys_read) 的性能

.问题修复: acl_json_util.c 中将 JSON 对象转为字符串的函数 acl_json_build
不能支持某些情形
.问题修复:acl_json_util.c 中的函数 json_escape_append 不应针对字符 '/' 进行转义
.问题修复:acl_vstream.c 在写时有可能会造成死循环
.问题修复:acl_vstream.c 中函数 __sys_read 的标志位 sys_read_ready 置 0 应该在 read_fn/fread_fn 函数返回后
.问题修改:acl_aio_read.c 中的 reactor IO 方式的函数 acl_aio_enable_read 内部在某种情况下有可能不会触发读回调过程
.问题修复:acl_sys_socket.c 中的读/写超时参数 timeout 不起作用
.问题修复:acl_threads_server.c/acl_aio_server.c 服务器模板,当采用 TCP 分发方式时,如果 acl_master reload 后若子进程配置的不是立即退出,则该子进程会重试连接 TCP 派发器从而导致该子进程永不会退出
.问题修复:snprintf.c 中 acl_secure_snprintf/acl_secure_vsnprintf 在调用 _vsnprintf_s 时有误,第三个参数需传入 _TRUNCATE,否则当缓冲区较小时会产生断言
.问题修复:acl_threads_server.c 将对客户端 IP 地址访问权限的处理过程放在 client_wakeup 中,否则会造成 master_threads2 类产生 core

.其它:整理库的所有头文件,使之更规范

二、lib_protocol 库
.问题修复: http_hdr_req.c 中的函数  __strip_url_path 仍然存在问题,因为输入的两个参数有可能指向相同的内存地址,从而导致第二个参数被赋 '\0',所以应该把 ACL_VSTRING_RESET/ACL_VSTRING_TERMINATE 放在 acl_argv_split 之后
.问题修复:http_hdr_req.c 中当重复使用线程局部变量时调用 __hdr_reset 来重置其中的一些参数,虽然调用了 ACL_VSTRING_RESET,但该宏并不会将缓冲数据尾部置 0,导致旧的数据会被重复使用
问题修复: proto_snprintf.c 中函数 proto_secure_snprintf/proto_securevsnprintf 在调用 _vsnprintf_s 时第三个参数应该为 _TRUNCATE,否则当缓冲区给的比较小时VC提供的 API 内部会产生断言

三、lib_acl_cpp 库
.新特性:locker 类增加了 try_lock 方法
.新特性:xml 类增加了几个方法
.新特性:json 类增加了构造布尔型和数值型的接口
.新特性:stream_setup 类现在可以支持 aio_stream 非阻塞流了
.新特性:polarssl_io 类增加了支持非阻塞 IO 的方法
.新特性:string 类增加了 find_blank_line/find_reset 方法,用来方便从当前缓冲区中查找一个空行的位置
.新特性:string 类增加了 substr 方法,用来从当前缓冲区中提取数据
.新特性:master_threads2 类增加了 proc_exit_timer 虚函数,当子进程需要退出时服务器模板将会回调该虚函数以决定子进程是否可以退出
.新特性:master_threads2 类增加了 thread_on_handshake 方法,当服务端调用完 thread_on_accept 后可以在子线程中调用 thread_on_handshake 方法,以处理较长的任务

.问题修复:snprintf.cpp 中函数 snprintf/vsnprintf 在调用 _vsnprintf_s 时第三个参数应该为 _TRUNCATE,否则当缓冲区给的比较小时VC提供的 API 内部会产生断言
.问题修复:fstream::open 方法在打开文件时先调用基类 stream::open_stream,然后基类函数再调用 C 库 acl_vstream_fdopen 时没有说明打开流的类型,导致内部流对象 ACL_VSTREAM 的关闭回调函数设置有误
.问题修复:http_response 类中当调用 read_header 方法时,需要自动将 head_sent_ 置为 false,以便于同一连接的下一次会话时可以正确发送 HTTP 响应头
.问题修复:istream 类中的 xxx_peek 函数在读出错时没有判断 errno 为 ACL_EWOULDBLOCK 的情况,在非阻塞方式下,当读返回 -1 且 errno 为 ACL_EWOULDBLOCK 时并不表示读出错
.问题修复:polarssl_io 类在非阻塞模式下有可能会阻塞在 IO 上

.新示例:增加了 json 测试用例 json/json7
.新示例:新 string/blank_line 示例,用来测试上面新增的方法

四、参考链接:
技术博客:http://zsxxsz.iteye.com/
download: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
QQ 群:242722074

0
0
评论 共 0 条 请登录后发表评论

发表评论

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

相关推荐

  • SAP .Net Nco 3.0.22 Windows 平台 32bit 64bit

    SAP .Net Nco 3.0.22 windows 平台 32bit 64bit SAP ERP vs None SAP ERP connection

  • Omi - 前端跨框架跨平台框架

    Omi - 前端跨框架跨平台框架 基于 Web Components 并支持 IE8+(omio),小程序(omip) 和 任意前端框架集成 Omi 生态 → Omi 生态学习路线图 基础生态 项目 描述 omi-docs和例子 Omi 官方文档 omim ...

  • UniWeb 3.0.22

    ↓↓↓↓↓↓插件仅用于学习,禁止商用,为了维护您的个人权益,请支持正版↓↓↓↓↓↓ CHANGES: -10/09/2014 Made a cross platform TcpClient class to remove WP8 shenanigans with prebuilt DLL. ...

  • freeradius-3.0.22-For Windows x64

    freeradius-3.0.22 Windows版,64位

  • resin-3.0.22

    resin3.0.22版本,完全好用的版本

  • 鲸飞酒店云PMS v3.0.22

    房态图右键锁房和关房时间段显示。优化:房费和套餐分开记录。修复:全日房续房报错。

  • plexus-utils-3.0.22.jar

    java运行依赖jar包

  • zabbix30-agent-3.0.22-2.el7.aarch64.rpm

    适用于arm架构的Linux系统

  • resin-3.0.22.zip

    Resin是一款JSP Servlet服务器,支持对servlet、jsp进行支持,支持对动态的内容进行显示,可以对服务器的数据进行增加等操作,非常安全可靠,有需要可以下载。

  • Screeny.3.SE.v3.0.22.

    Screeny.3.SE.v3.0.22.

  • NativeExcel3.0.22.rar

    NativeExcel3.0.22.rar

  • orientdb-graphdb-3.0.22.jar

    OrientDB 图形数据库 com.orientechnologies/orientdb-graphdb/3.0.22/orientdb-graphdb-3.0.22.jar

  • Python库 | portage-3.0.22-py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:portage-3.0.22-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

  • Python库 | fast_trace-3.0.22.tar.gz

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

  • PyPI 官网下载 | FlexGet-3.0.22.tar.gz

    资源来自pypi官网。 资源全名:FlexGet-3.0.22.tar.gz

  • samba-3.0.22.tar.gz

    samba-3.0.22.tar.gz

  • VB学生档案管理系统设计与实现.rar

    计算机专业毕业设计VB精品论文资源

  • debugpy-1.6.3-cp37-cp37m-win_amd64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

  • 基于ssm的学生宿舍报修管理系统

    开发语言:Java JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.6/5.7(或8.0) 数据库工具:Navicat 开发软件:idea 依赖管理包:Maven 代码+数据库保证完整可用,可提供远程调试并指导运行服务(额外付费)~ 如果对系统的中的某些部分感到不合适可提供修改服务,比如题目、界面、功能等等... 声明: 1.项目已经调试过,完美运行 2.需要远程帮忙部署项目,需要额外付费 3.本项目有演示视频,如果需要观看,请联系我v:19306446185 4.调试过程中可帮忙安装IDEA,eclipse,MySQL,JDK,Tomcat等软件 重点: 需要其他Java源码联系我,更多源码任你选,你想要的源码我都有! https://img-blog.csdnimg.cn/direct/e73dc0ac8d27434b86d886db5a438c71.jpeg

Global site tag (gtag.js) - Google Analytics