发布于 2016-11-01 15:18:50 | 161 次阅读 | 评论: 0 | 来源: 网友投递
acl C语言网络框架库
acl 框架库是一个 C 库,主要包含:服务器开发框架、同步/异步网络通讯、常用数据结构、进程池/线程池、流式 xml/json 解析器、http/ping 应用协议等内容;
acl 3.2.2 版本发布了,
本次 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::peek_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/