mirror of
https://gitee.com/acl-dev/acl.git
synced 2024-11-29 18:37:41 +08:00
modify README
This commit is contained in:
parent
6d95d2ef26
commit
c2ffebc01b
95
README.md
95
README.md
@ -25,20 +25,21 @@
|
||||
* [1.2.5.1、客户端模式](#1251客户端模式)
|
||||
* [1.2.5.2、服务端模式](服务端模式)
|
||||
* [1.2.6、Redis 客户端库](#126redis-客户端库)
|
||||
* [1.2.7、MIME 协议库](#127mime-协议库)
|
||||
* [1.2.8、网络协程库](#128网络协程库)
|
||||
* [1.2.9、数据库相关](#129数据库相关)
|
||||
* [1.2.10、数字键的 K-V 磁盘存储模块(zdb)](#1210数字键的-k-v-磁盘存储模块zdb)
|
||||
* [1.2.11、其它功能库](#1211其它功能库)
|
||||
* [1.2.11.1、常用数据结构模块](#12111常用数据结构模块)
|
||||
* [1.2.11.2、内存操作模块](#12112-内存操作模块)
|
||||
* [1.2.11.3、常用字符串操作模块](#12113常用字符串操作模块)
|
||||
* [1.2.11.4、文件目录模块](#12114文件目录模块)
|
||||
* [1.2.11.5、读配置文件模块](#12115读配置文件模块)
|
||||
* [1.2.11.6、文件队列处理库](#12116文件队列处理库)
|
||||
* [1.2.11.7、json解析库](#12117json解析库)
|
||||
* [1.2.11.8、xml解析库](#12118xml解析库)
|
||||
* [1.2.11.9、常见编码库](#12119常见编码库)
|
||||
* [1.2.7、MQTT 协议库](#127mqtt-协议库)
|
||||
* [1.2.8、MIME 协议库](#128mime-协议库)
|
||||
* [1.2.9、网络协程库](#129网络协程库)
|
||||
* [1.2.10、数据库相关](#1210数据库相关)
|
||||
* [1.2.11、数字键的 K-V 磁盘存储模块(zdb)](#1211数字键的-k-v-磁盘存储模块zdb)
|
||||
* [1.2.12、其它功能库](#1212其它功能库)
|
||||
* [1.2.12.1、常用数据结构模块](#12121常用数据结构模块)
|
||||
* [1.2.12.2、内存操作模块](#12122-内存操作模块)
|
||||
* [1.2.12.3、常用字符串操作模块](#12123常用字符串操作模块)
|
||||
* [1.2.12.4、文件目录模块](#12124文件目录模块)
|
||||
* [1.2.12.5、读配置文件模块](#12125读配置文件模块)
|
||||
* [1.2.12.6、文件队列处理库](#12126文件队列处理库)
|
||||
* [1.2.12.7、json解析库](#12127json解析库)
|
||||
* [1.2.12.8、xml解析库](#12128xml解析库)
|
||||
* [1.2.12.9、常见编码库](#12129常见编码库)
|
||||
* [二、平台支持及编译](#二平台支持及编译)
|
||||
* [三、目录结构说明](#三目录结构说明)
|
||||
* [3.1、lib_acl---基础 C 库](#31lib_acl)
|
||||
@ -55,16 +56,14 @@
|
||||
<!-- vim-markdown-toc -->
|
||||
|
||||
## 一、描述
|
||||
acl 工程是一个跨平台(支持LINUX,WIN32,Solaris,MacOS,FreeBSD)的网络通信库及服务器编程框架,同时提供更多的实用功能库。通过该库,用户可以非常容易地编写支持多种模式(多线程、多进程、非阻塞、触发器、UDP方式、协程方式)的服务器程序,WEB 应用程序,数据库应用程序。此外,该库还提供了常见应用的客户端通信库(如:HTTP、SMTP、ICMP、redis、memcache、beanstalk、handler socket),常见流式编解码库:XML/JSON/MIME/BASE64/UUCODE/QPCODE/RFC2047 etc。
|
||||
acl 工程是一个跨平台(支持LINUX,WIN32,Solaris,MacOS,FreeBSD)的网络通信库及服务器编程框架,同时提供更多的实用功能库。通过该库,用户可以非常容易地编写支持多种模式(多线程、多进程、非阻塞、触发器、UDP方式、协程方式)的服务器程序,WEB 应用程序,数据库应用程序。此外,该库还提供了常见应用的客户端通信库(如:HTTP、SMTP、ICMP、MQTT、Redis、Memcache、Beanstalk、Handler socket),常见流式编解码库:XML/JSON/MIME/BASE64/UUCODE/QPCODE/RFC2047 etc。
|
||||
|
||||
### 1.1、库组成
|
||||
本工程主要包含 5 个库及大量示例。5 个库的说明如下:
|
||||
1. lib_acl: 该库是最基础的库,其它 4 个库均依赖于该库; 该库以 C 语言实现。
|
||||
2. lib_protocol: 该库主要实现了 http 协议及 icmp/ping 协议; 该库以 C 语言实现。
|
||||
3. lib_acl_cpp: 该库用 C++ 语言封装了 lib_acl/lib_protocol 两个库,同时增加了一些其它有价值的功能应用。
|
||||
4. lib_fiber: 该库为支持协程库,直接 hook 系统 read/write 等 API,与 epoll 配合支持高并发网络编程。
|
||||
5. lib_dict: 该库主要实现了 KEY-VALUE 的字典式存储库,该库另外还依赖于 BDB, CDB 以及 tokyocabinet 库。
|
||||
6. lib_tls: 该库封装了 openssl 库,使 lib_acl 的通信模式可以支持 ssl。
|
||||
本工程主要包含 4 个库及大量示例。4 个库的说明如下:
|
||||
1. **lib_acl**: 该库是最基础的库,其它 3 个库均依赖于该库; 该库以 C 语言实现。
|
||||
2. **lib_protocol**: 该库主要实现了 http 协议及 icmp/ping 协议; 该库以 C 语言实现。
|
||||
3. **lib_acl_cpp**: 该库用 C++ 语言封装了 lib_acl/lib_protocol 两个库,同时增加了一些其它有价值的功能应用。
|
||||
4. **lib_fiber**: 该库为支持协程库,直接 hook 系统 read/write 等 API,与 epoll 配合支持高并发网络编程,有关协程更多内容参考 [README.md](lib_fiber/README.md)。
|
||||
|
||||
* 整体架构图
|
||||
![整体架构图](res/img/architecture.png)
|
||||
@ -96,16 +95,17 @@ acl 工程是一个跨平台(支持LINUX,WIN32,Solaris,MacOS,FreeBSD
|
||||
支持非阻塞方式连接、读(按行读,规定长度读)、写(写行,写规定长度,写一组数据)等操作。
|
||||
|
||||
##### 1.2.1.4、常见网络应用协议库
|
||||
主要支持常见网络应用协议,诸如:HTTP、SMTP、ICMP,其中 HTTP、ICMP 两个模块实现了阻塞、非阻塞两种通信方式;此外,HTTP 协议在C++版的 lib_acl_cpp 中还支持服务端、客户端两种通信方式,当作为服务端使用时,支持类似于 JAVA HttpServlet 的接口使用方式,当作为客户端方式使用时,支持连接池与集群管理方式,该模块同时支持 cookie、session、HTTP MIME 文件上传、分块传输、字符集自动转换、自动解压缩、断点续传等丰富的功能。
|
||||
主要支持常见网络应用协议,诸如:HTTP、SMTP、MQTT、ICMP,其中 HTTP、MQTT、ICMP 两个模块实现了阻塞、非阻塞两种通信方式;此外,HTTP 协议在C++版的 lib_acl_cpp 中还支持服务端、客户端两种通信方式,当作为服务端使用时,支持类似于 JAVA HttpServlet 的接口使用方式,当作为客户端方式使用时,支持连接池与集群管理方式,该模块同时支持 cookie、session、HTTP MIME 文件上传、分块传输、字符集自动转换、自动解压缩、断点续传等丰富的功能。
|
||||
|
||||
##### 1.2.1.5、常见网络通信库
|
||||
支持 memcached、beanstalk、handler socket 客户端通信库,该通信库支持连接池方式。
|
||||
支持 Redis、Memcached、MQTT、Beanstalk、Handler socket 客户端通信库,该通信库支持连接池方式。
|
||||
|
||||
#### 1.2.2、网络 IO 事件引擎
|
||||
支持 select(UNIX/LINUX/WIN32)、poll(UNIX/LINUX)、epoll(LINUX)、kqueue(BSD)、devpoll(solaris)、iocp(WIN32)、窗口消息(WIN32) 等系统事件引擎,同时支持 Reactor 及 Proactor 两种编程模型。
|
||||
|
||||
#### 1.2.3、网络服务器框架
|
||||
该模块是 acl 中最为重要的模块,提供了服务器编程中常用的基础设施,该服务器框架来源于著名的 Postfix,在其基础上进行了诸多扩展,目前已经支持的主要服务模型有:
|
||||
该模块是 acl 中最为重要的模块,提供了服务器编程中常用的基础设施,该服务器框架来源于著名的 Postfix,在其基础上进行了诸多扩展,有关 acl 服务器编程的更多内容介绍参见:[acl服务器编程](https://blog.csdn.net/zsxxsz/category_8736921.html?spm=1001.2014.3001.5482)。
|
||||
目前已经支持的主要服务模型有:
|
||||
|
||||
##### 1.2.3.1、进程模型
|
||||
一个连接一个进程,这种模型的优点是编程简单、安全稳定,缺点是并发度不高;
|
||||
@ -131,7 +131,7 @@ acl 工程是一个跨平台(支持LINUX,WIN32,Solaris,MacOS,FreeBSD
|
||||
提供了跨平台的支持 Posix 规范的线程接口(支持WIN32);线程池模块通过多种措施最大程度地减少线程任务分配时的锁冲突(用在 acl 服务器框架中多进程多线程服务模型中)。
|
||||
|
||||
#### 1.2.5、HTTP 协议库
|
||||
提供了完整的 HTTP 协议实现,支持 HTTP/1.0、1.1 版本; 同时支持客户端模式及服务端模式:
|
||||
提供了完整的 HTTP 协议实现,支持 HTTP/1.0、1.1 版本,更多内容介绍见:[Acl HTTP编程](https://blog.csdn.net/zsxxsz/category_8736920.html)。
|
||||
|
||||
##### 1.2.5.1、客户端模式
|
||||
1. 支持连接池方式;
|
||||
@ -157,58 +157,64 @@ acl 工程是一个跨平台(支持LINUX,WIN32,Solaris,MacOS,FreeBSD
|
||||
2. 支持连接池方式;
|
||||
3. 按 redis 数据结构类型分成独立的 C++ 类;
|
||||
4. 每个命令映射为 1 个至多个函数.
|
||||
具体内容参考:[使用 acl 库编写高效的 C++ redis 客户端应用](http://zsxxsz.iteye.com/blog/2184744)
|
||||
更多有关 Acl Redis 客户端库编程的内容参见:[Acl Redis 介绍](lib_acl_cpp/samples/redis/README.md), [Redis示例](https://blog.csdn.net/zsxxsz/category_8736931.html)。
|
||||
|
||||
#### 1.2.7、MIME 协议库
|
||||
#### 1.2.7、MQTT 协议库
|
||||
1. 支持 MQTT3.1.1 版本;
|
||||
2. 支持流式 MQTT 协议解析及构建;
|
||||
3. 可以用在客户端及服务端;
|
||||
4. 支持阻塞通信模式及非阻塞通信模式。
|
||||
|
||||
#### 1.2.8、MIME 协议库
|
||||
1. 支持流式 MIME 数据解析;
|
||||
2. 支持 MIME RFC2045,RFC2047,RFC822.
|
||||
|
||||
#### 1.2.8、网络协程库
|
||||
#### 1.2.9、网络协程库
|
||||
直接 hook 系统底层 IO API,与 epoll 配合实现网络 IO 的高并发、高性能编程框架,通过该模块可以使一些原生的常见阻塞式网络库(如 mysql/redis/http 等客户端库)直接支持高并发网络操作;通过使用该模块,编程者采用顺序思维编程方式,在协程库内部将阻塞模式转为非阻塞模式,因而大大提高了网络并发能力及处理性能。
|
||||
|
||||
#### 1.2.9、数据库相关
|
||||
#### 1.2.10、数据库相关
|
||||
设计了统一的数据库操作接口及连接池处理方式,目前支持 sqlite/mysql/postgresql。
|
||||
|
||||
#### 1.2.10、数字键的 K-V 磁盘存储模块(zdb)
|
||||
#### 1.2.11、数字键的 K-V 磁盘存储模块(zdb)
|
||||
采取 KEY/VALUE 分块存储方式,因为 KEY 限定为数字类型,只需内存计算便可算出 KEY 的位置,KEY 中存放了 VALUE 的位置,所以对于任何的数据查询只需两次磁盘定位。(本人在和讯做流量统计存储时,使用该种方式替代了BSD、TC 等采用B树的 K-V 存储)。
|
||||
|
||||
#### 1.2.11、其它功能库
|
||||
#### 1.2.12、其它功能库
|
||||
|
||||
##### 1.2.11.1、常用数据结构模块
|
||||
##### 1.2.12.1、常用数据结构模块
|
||||
该模块提供了常见的哈希表(及多种哈希算法)、动态数组、双向链表、平衡二叉树、队列、二分块查找树、256 叉匹配树等数组结构;提供了统一的数据结构遍历方法(采用 acl_foreach)。
|
||||
|
||||
##### 1.2.11.2、 内存操作模块
|
||||
##### 1.2.12.2、 内存操作模块
|
||||
|
||||
该模块提供三种内存池模型:
|
||||
1. <b>基本的内存方式:</b>内部封装了系统的 malloc/free API,提供了内存校验等安全措施;该方式同时提供外部注册接口,允许使用者注册自己的内存分配模型;
|
||||
2. <b>内存片(slab) 方式:</b>根据不同的尺寸大小分配多个定长内存链,可以有效地减少内存碎片,大大提升内存分配效率;
|
||||
3. <b>内存链方式:</b>将长度不一的小内存分配在一条内存页上,可以非常有效地使用内存,减少内存浪费。
|
||||
|
||||
##### 1.2.11.3、常用字符串操作模块
|
||||
##### 1.2.12.3、常用字符串操作模块
|
||||
支持字符串匹配查找、前(后)向比较、字符串分割、字符串大小写转换、H2B/B2H 转换、URL 编码/解码等功能。
|
||||
|
||||
##### 1.2.11.4、文件目录模块
|
||||
##### 1.2.12.4、文件目录模块
|
||||
支持多级目录创建、多级目录扫描、文件句柄缓存等功能,同时在处理多级目录采用循环方式,避免了递归方式时可能的栈溢出的隐患。
|
||||
|
||||
##### 1.2.11.5、读配置文件模块
|
||||
##### 1.2.12.5、读配置文件模块
|
||||
支持读 name=value 形式的配置文件,value 较长时可以使用反斜杠(\)折行,采用配置表方式提取配置文件中的配置项。
|
||||
|
||||
##### 1.2.11.6、文件队列处理库
|
||||
##### 1.2.12.6、文件队列处理库
|
||||
支持多组目录队列文件的创建、扫描、删除等操作;常用于临时文件队列调度的服务程序中。
|
||||
|
||||
##### 1.2.11.7、json 解析库
|
||||
##### 1.2.12.7、json 解析库
|
||||
支持流式方式解析 json 数据,同时支持 json 数据包组装。
|
||||
|
||||
##### 1.2.11.8、xml 解析库
|
||||
##### 1.2.12.8、xml 解析库
|
||||
支持流式方式解析 xml 数据,同时支持 xml 数据包组装。
|
||||
|
||||
##### 1.2.11.9、常见编码库
|
||||
##### 1.2.12.9、常见编码库
|
||||
还包括 rfc2047、url、base64、uucode、qpcode、charset 等编解码库,这些解码库均采用流式解析方式,适合于多种网络 IO 模型(阻塞/非阻塞TCP、UDP)。
|
||||
|
||||
## 二、平台支持及编译
|
||||
整个工程目前支持 Linux(AS4,5,6, CS4,5,6, ubuntu), Windows, MacOS, FreeBSD, Solaris,Android,IOS。
|
||||
* Linux/UNIX: 编译器为 gcc,直接在终端命令行方式下分别进入 lib_acl/lib_protocol/lib_acl_cpp 目录下,运行 make 命令即可。
|
||||
* Windows: 可以用 VC2003/VC2008/VC2010/VC2012/vc2013/vc2015 进行编译。(如果需要用 VC6/VC2005 编译,可以参考 VC2003 的编译条件)。
|
||||
* Windows: 可以用 VC2003/VC2008/VC2010/VC2012/vc2013/vc2015/vc2017/vc2019 进行编译。
|
||||
* MacOS:可使用 xcode 进行编译。
|
||||
* 同时支持 CMake 跨平台编译方式
|
||||
|
||||
@ -216,8 +222,6 @@ acl 工程是一个跨平台(支持LINUX,WIN32,Solaris,MacOS,FreeBSD
|
||||
* 使用 lib_acl 的动态库时,需要在用户的工程预定义: ACL_DLL;
|
||||
* 使用 lib_protocol 动态库中的 HTTP 库或 ICMP 库时,需要在工程中预定义 HTTP_DLL 或 ICMP_DLL;
|
||||
* 使用 lib_acl_cpp 的动态库时,需要在工程中预定义 ACL_CPP_DLL,如果您使用用 VC2003 编译环境则还需要预定义 VC2003;
|
||||
* 使用 lib_dict 的动态库时,需要在工程中预定义 DICT_DLL;
|
||||
* 使用 lib_tls 的动态库时,需要在工程中预定义 TLS_DLL。
|
||||
* 详细编译过程,参见:[acl 库的编译及使用](BUILD.md)
|
||||
|
||||
## 三、目录结构说明
|
||||
@ -272,6 +276,7 @@ acl 工程是一个跨平台(支持LINUX,WIN32,Solaris,MacOS,FreeBSD
|
||||
15. session: HTTP 会话库
|
||||
16. **redis: 完整实现了 redis 协议的客户端通信库(总共 12 个大类,150 多个命令),支持连接池及连接池集群管理**
|
||||
17. disque: 支持集群消息队列服务 disque 的客户端库,支持连接池及连接池集群管理
|
||||
18. **mqtt: 支持流式解析 MQTT 协议,可以与任何 IO 通信方式结合;同时提供了阻塞及非阻塞通信接口**
|
||||
|
||||
### 3.4、lib_fiber
|
||||
1. c 目录:该目录下主要为 C 语言版本实现的网络协程库,其中包含源文件及头文件
|
||||
@ -319,4 +324,4 @@ acl 工程是一个跨平台(支持LINUX,WIN32,Solaris,MacOS,FreeBSD
|
||||
- Oschina: https://gitee.com/acl-dev/acl
|
||||
- Download: https://sourceforge.net/projects/acl
|
||||
- 微 博: http://weibo.com/zsxxsz
|
||||
- QQ 群: 242722074
|
||||
- QQ 群: 693868497
|
||||
|
Loading…
Reference in New Issue
Block a user