阅读更多
acl 3.0.15 版本发布了!

项目主页:https://sourceforge.net/projects/acl/
技术文章主页:http://zsxxsz.iteye.com/

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库,提供了更为强大的编程接口及丰富的功能类

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

  • 常见网络应用库: SMTP 客户端库/PING 库/memcache 客户端库/handlersocket 客户端库/beanstalk 客户端库
  • HTTP 网络库:HTTP 客户端/服务端库,C++版 HttpServlet 类,HTTP COOKIE/HTTP SESSION 等
  • 邮件解析库:mime解析库/RFC2047/RFC2048/mime base64/mime qp/mime uucode 等
  • 网络通信库:阻塞/非阻塞网络 IO 库(其中 lib_acl_cpp 库通过嵌入 polarssl 而具备了 SSL 的能力)
  • 服务器框架:包括进程池模式、线程池模式、非阻塞模式、UDP通信模式及触发器模式
  • 事件引擎:支持 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 解析库采用有限状态机方式解析数据,处理方式更为灵活

本次 acl 升级除了一些 bug 修复外,主要的优化有:

  • 优化了 ACL 中的线程池调度算法,使线程池的任务调度性能大大提升;
  • 添加了新的服务器线程池框架模板;
  • 完善了 json 解析库,解析器更为符合 json 规范。

具体改进如下:

一、基础 C 库 lib_acl 改进

  • 新特性:完善了 json 流式解析器,提供了更多的功能(如:可以提取某个结点标签后的 json 字符串)
  • 新特性:acl_threads_server.c, 新添加的线程池服务器框架模板
  • 新特性:acl_threads_server.c 服务器模板增加了配置控制参数 ioctl_batadd, 用来控制是否采用任务添加批处理方式
  • 新特性:event.c, acl_events.c, 新增加了任务派发前及派发后的回调过程
  • 新特性:acl_pthread_pool.c, 新增加了 acl_pthread_pool_alloc_job, acl_pthread_pool_free_job, acl_pthread_pool_add_job(新的批量添加线程任务的接口)
  • 性能优化:acl_pthread_pool.c, 由原来线程池统一用一个线程条件变量改为每个线程一个单独的线程条件变量,从而大大减少线程之间的锁冲突,因而提高了线程池的运行性能
  • 性能优化:acl_pthread_pool.c, 线程池任务调度优化,将任务分配至每个线程本身的任务队列,从而将线程之间的竞争条件降至最低,大大提高了线程池任务调度的性能
  • 性能优化:acl_pthread_pool.c 线程池任务调度优化,当以批处理方式添加任务时,优先将任务分给空闲线程,减少线程竞争的概率
  • 问题修复:acl_json_parse.c,json_val() 函数中没有针对转义内容做特殊处理
  • 问题修复:修复了一些 json 解析器中的 bug
  • 问题修复:线程池服务器模板 (acl_threads_server.c) 应该在 acl_chroot_uid 调用之后再调用 set_core_limit,这样才能使应用程序崩溃时产生 core 文件
  • 编译:去掉了 ACL_MS_WINDOWS 宏定义,在WINDOWS环境下统一使用 WIN32 来标识 VC 编译环境
  • 编译:支持 vc2008 编译器

二、网络应用协议库lib_protocol改进

  • 编译:在高版本VC(>VC2008) 环境下,使用更为安全的函数

三、功能丰富的C++库 lib_acl_cpp 改进

  • 新特性:master_threads2,新增加了服务器线程池模板
  • 新特性:socket_stream 类支持 ssl 传输(与 polarssl 结合); 去掉了 ssl_stream 类
  • 新特性:json 类支持将字符串对象添加至数组对象中
  • 新特性:http_request 类添加了方法 set_timeout 可以设置网络超时及读写超时
  • 新特性:在使用高版本 vc(_MSC_VER >= 1500,即 VC9 以上版本) 编译器时,不再使用 _CRT_SECURE_NO_WARNINGS 宏来避免编译器警告,而是使用 VC 建议的安全函数
  • 问题修复:json.cpp 中 json_node::set_text 误把文本值赋予标签变量
  • 问题修复:queue_file.cpp,queue_file::create 函数内在尝试创建文件时可能会因为文件系统出问题而进入循环过程,通过增加标志位避免该问题
  • 问题修复:新线程池服务器模板 master_threads2 类在调用 service_pre_jail 时应该通过 acl_threads_server_event 获得事件引擎 (原来写的是 acl_ioctl_server_event, 这个是旧的服务器模板获取事件引擎的方法)
  • 问题修复:HttpServletRequest.cpp, HttpServletRequest::readHeader 在解析 POST中的数据体时,需要判断请求头中 Content-Length 为 0 的情况
  • 示例:samples/json2, 用于测试级联提取数据的例子
  • 示例:将所有的 json 测试用例移至 samples/json 目录下
  • 注释:修正 connect_manager::init 原来错误的参数格式描述
  • 安全:ipc 通信机制中增加了随机数安全验证功能,以防止外来干扰


参考链接:

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

发表评论

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

相关推荐

  • 表格(table)数据导出成Excel

    使用xlxs-js库 function exportExcel () { var wb = XLSX.utils.table_to_book(document.querySelector('.my-el-table')) var wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' }) ...

  • 导出内容到文件

    int LogToFile(char* pFilePath, WORD* pBuffer) {     int nRetCode = 0;     FILE* pFile;     pFile = fopen(pFilePath, "a+");     if (NULL == pFile)     {         printf("Fail to open file!\n");

  • JS直接导出excel 兼容ie、chrome、firefox

    <html> <head> <script type="text/javascript" language="javascript"> var idTmr; function getExplorer() { var explorer = window.navigator.userAgent ; //ie

  • 把Table中的内容输出到Excel 中

    把一Table中的内容输出到Excel 中1。 拖一HTML控件Table 到 Web 页面中, id 为 TABLE12. 在Html文件中加入属性 runat = "server".e g:&lt;TABLE id="TABLE1" ... runat="server"&gt;3. 加一按钮,把下面的函数加入此按钮产生的事件中.private void ibtnDaoChu_Click...

  • html表格转为xls自动,HTML表格转Excel Table To Xls

    软件介绍Java实现,HTML table转换为Excel,支持大部分样式,欢迎提出意见或者建议,后续可能,只是说可能会增加外部样式支持。有图有真相:转换结果:欢迎捧场,拍砖。使用方式:1、添加Maven依赖me.chyxiontable-to-xls0.0.1-RELEASE2、使用StringBuilderhtml=newStringBuilder();Scanners=new...

  • EXT--combox的取值

    属性的区别是,id只能得到下拉时看到的文字,而hiddenName才是提交到后台的value。如果没有设置hiddenName,在后台是接收不到值的,这个大家一定要注意。getValue() 得到的是combobox 的 value 值,getRawValue() ...

  • EasyUI的Combogrid 多选项 通过Form表单提交,后台只能获取最后一个值的解决办法

    在combogrid的multiple参数为true的情况下(多选),通过easyui的$('#fm').form('submit')方法提交form表单时,后台只能获取到combogrid的最后一个选项值; 前端代码: &lt;form id="form1" method="post"&gt; ...

  • combox 使用

    hiddenName : 'education',// 大家要注意的是hiddenName和name属性,name只是下拉列表的名称,作用是可通过,而hiddenName才是提交到后台的input的name。如果没有设置hiddenName,在后台是接收不到数据的,这个...

  • easyui combobox实现下拉框获取后端数据并多选和取值,实现textbox的隐藏框

      需求是在进入表单时,展示下拉框数据,数据从后端获取,并支持多选,最后再提交表单把数据传回给后端。虽然combobox可以支持用url请求后端,但因为form包含多个下拉框,不可能每个都自己去请求,所以直接通过...

  • jQuery打造智能提示插件二(可编辑下拉框)

    param: null//要发送到服务端参数格式,主要是要动态取值的参数:[{ keyname: "catalog", keyvalue: "txtCata" }, { keyname: "cba", keyvalue: "txtCata2"},……] }; $.fn.combox = function (options) { ...

  • 获取表格中的数据导出excel

    获取表格中的数据导出excel 下载js安装包地址:https://download.csdn.net/download/kieven2008/10285254 引入:&amp;lt;script src=&quot;js/JsonExportExcel.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt; HTML: &amp;lt;el-table ref=&quot;multipleTable&quot; :data=&quot;tableDat...

  • tp5导出excel表格(phpexcel)

    下载:PHPExcel https://github.com/PHPOffice/PHPExcel 解压后:Classes文件夹改名为PHPExcel 把文件夹PHPExcel 放到根目录vendor文件夹下 public function code_export() { $ids = input('ids'); if (!$ids) { ...

  • 将DataTable里的内容导出到Excel

     private void SaveToExcel()      {          SaveFileDialog SFDia = new SaveFileDialog();          SFDia.Filter = "Exel files (*.xls)|*.xls";          SFDia.FilterIndex = 2;          SFDia.RestoreDirec

  • html中table导出Excel

    有时候我们需要把网页中的数据导出excel格式来,那么我们用下面两种方法可以完成。第一种.自写代码<html> <head> <meta http-equiv="content-Type" content="text/html;charset=utf-8"/> <script type="text/javascript"> function base64 (content) {

  • doc命令,将生成的内容保存到指定文件中

    doc命令,将生成的内容保存到指定文件中

  • jQuery打造智能提示插件

    插件根据实际需要在单功能上封装的,实现传入后台数据地址,要保存值的input,前台要传入的参数(过滤条件),来返回下拉提示数据,数据过多可上下滚动选择,选择后显示文本与对应的值,供后台操作,如图: ...

  • swing设置JComboBox下拉列表内容与显示内容不相同

    但是此时如果设置不可编辑又会变回原样,所以我们设置Editor的组件禁用编辑(不能设置combox禁用Editor) comboBox.getEditor().getEditorComponent().setEnabled(false); 最终效果 tips:也可以自定义...

  • java 实习遇到的问题和一些小经验(第一个月)

    都是随手记录的可能比较乱;但记录我的成长 ...4.前台和后台 5.Window.open(“url”,”_blank”);其中_blank属性表示打开一个空白页面 6.动态生成行号:  ${index.index+1} //注意:行

  • ExtJS ComboBox 下拉列表详细用法

    //默认值,要设置为提交给后台的值,不要设置为显示文本   emptyText :  '请选择',  //提示信息   mode :  'local ',  //数据加载模式,local代表本地数据   triggerAction :  'all',  // 显示所有...

  • combobox实现下拉框及其值的获取

    //后台返回的 json 数据方法地址 url:'${pageContext.request.contextPath}/user/queryalluser', valueField: 'userid' , //相当于option的value值 textField : 'username' , //相当于&lt;option&gt;&lt;/option&gt;之间的...

Global site tag (gtag.js) - Google Analytics