acl 3.2.2 版本发布了,acl 是 one advanced C/C++ library 的简称,主要包括网络通信库以及服务器框架库等功能,支持 Linux/Windows/Solaris/FreeBsd/MacOS 平台;整个 acl 项目主要包含四个函数库:lib_acl(纯C开发的基础库,主要包含网络通信及服务器编程框架以及其它丰富的功能)、lib_protocol(包含 HTTP/PING/SMTP 通信协议的C语言实现)、lib_fiber(网络协程库)、lib_acl_cpp(基于 lib_acl 及 lib_protocol 两个C库,提供了更为强大的编程接口及丰富的功能类)。 本次 acl 升级的最主要内容为:增加了 Http Websocket 功能模块(lib_acl_cpp中),增加了 C++ struct 对象序列化和反序列化功能(lib_acl_cpp 中,由 niukey@qq.com 提供);修复了一些已知的问题。 acl 包括以下丰富的常用函数库: 1、服务器框架:包括进程池模式、线程池模式、非阻塞模式、UDP通信模式、触发器模式以及协程模式 2、网络通信库:阻塞/非阻塞网络 IO 库(其中 lib_acl_cpp 库通过嵌入 polarssl 而具备了 SSL 通信能力) 3、HTTP 网络库:HTTP 客户端/服务端库,HTTP 服务端支持 HttpServlet 接口访问方式;支持 HTTP cookies/session;HTTP 客户端支持连接池及连接池集群;支持 Websocket 4、redis 客户端库:实现了 redis 客户端命令中 12 个大类中的总共 150 多个命令,支持连接池及集群连接池方式 5、常见网络应用库: SMTP 客户端库/PING 库/DNS 解析库/memcache 客户端库/handler socket 客户端库/beanstalk 客户端库/disque 客户端库 6、邮件解析库:mime解析库/RFC2047/RFC2048/mime base64/mime qp/mime uucode 等 7、事件引擎:支持 select、poll(for unix)、epoll(for linux)、kqueue(for bsd)、devpoll(for solaris)、iocp(for win32)、win32 窗口消息(for win32)事件引擎 8、通用连接池库:高效的连接池基础类库,支持丰富的功能 9、数据库客户端库:对原生的数据库客户端库进行了二次封装,使编程更为简易,功能更为丰富,支持连接池及连接池集群管理功能 10、xml/json 流式解析库:区别于网上其它已有的 xml/json 解析库,acl 中的 xml/json 解析库采用有限状态机方式解析数据,处理方式更为灵活 11、网络协程库:该库将阻塞 IO 模式在底层通过上下文切换和事件触发方式转变为非阻塞模式,从而方便程序员快速编写高并发、高性能的网络服务 12、支持将 C++ struct 对象序列化与反序列化(序列化为 Json 对象及由 Json 对象反序列化) 示例: 1、lib_acl/samples: 该目录下有大量的基于 lib_acl C 库的示例 2、lib_protocol/samples: 该目录下有大量的基于 lib_protocol C 库的示例 3、lib_acl_cpp/samples: 该目录下有大量的基于 lib_acl_cpp C++ 库的示例 4、lib_fiber/samples:该目录下有大量的基于协程的网络客户端/服务端示例 应用: 1、app/redis_tools: 该目录下为 redis 集群管理、监控及智能创建工具 2、app/wizard:用来自动生成 acl 服务器框架的向导程序 3、app/master_dispatch:用于管理和分发客户端连接的服务程序 4、app/gid:用来产生全局唯一整型 ID 的服务程序及客户端库 5、app/wizard_demo:为一些服务器测试程序 一、基础 C 库:lib_acl .新特性:acl_json_util.c 增加 acl_json_create_null 及 acl_json_create_array_null 用于创建 null 类型的节点 .新特性:ACL_VSTREAM 结构体中新增标志位 omode,主要用于 UNIX 平台打开文件 .问题修复:acl_json_util.c 中 acl_json_build/acl_json_building 创建 json 字符串时,针对非文本类型不应该有双引号 .问题修复:修复了 url coder 针对 '+' 编码时的不兼容性问题 .编译:使用 gcc 编译时若打开预编译选项,个别文件会因头文件未包含而报错 .编译:可以在 centos4.7 上使用 gcc 3.x.x 编译 二、lib_protocol 库 .无变化 三、lib_acl_cpp 库 .新特性:增加 webosket 功能类 .新特性:增加对象系列化模块 gson 类,用来将 struct 对象序列化为 json 对象及由 json 对象反序列化为 struct 对象 .新特性:json 类增加了 add_null/add_array_null 用于增加 null 类型节点 .新特性:fstream 类新方法 rename 用于修改文件名 .问题修复:json.cpp 中判断 json 节点类型的方法有误 .问题修复:json_node 类中的 get_text 方法当字符串长度为 0 时应该返回空串 "" 而不是返回 NULL 空指针 .问题修复:websocket 类中的函数 read_frame_head 里,当数据长度字段为两个字节时,应该使用 short 类型且要使用 ntohs 而非 ntohl 做转换 .问题修复:db_handle:eek_open 函数中的参数 charset 没有生效 .问题修复:redis_zset.cpp 中第二个 zrevrangebyscore_with_scores 返回结果集顺序是反的 .问题修复:redis_string::incrbyfloat 及 redis_hash::hincrbyfloat 中在调用 get_string 后判断是否出错的方式有问题,应该使用长度做为判定条件而不是 bool 值 .应用:app/gson 为 C++ struct 对象与 Json 对象转换的工具 .示例:app/gson/test 目录下测试用例 test/test0/test1/test2/test3/test4 用于测试 C++ struct 对象的序列化及反序列化 .示例:samples/websocket 下增加例子:upload_client/upload_server 四、lib_fiber 库 .新特性:fiber.c 中实现了 __i386__ 下 SETJMP,LONGJMP 的汇编方式 .问题修复:fiber_io.c 中的 __thread_fiber->loop_fn 没有赋初值 .示例:新增例子 server3、server4 五、参考链接: oschina-git:https://git.oschina.net/zsxxsz/acl github: https://github.com/zhengshuxin/acl/ sourceforge:http://sourceforge.net/projects/acl/ acl.3.2.2 发布, 跨平台网络通信与服务器框架下载地址