Quantcast
Channel: OSCHINA 社区最新新闻
Viewing all articles
Browse latest Browse all 44787

acl.3.2.2 发布, 跨平台网络通信与服务器框架

$
0
0

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::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/


Viewing all articles
Browse latest Browse all 44787

Trending Articles