- 一、描述
- 二、平台支持及编译
- 三、目录结构说明
- 四、谁在使用acl
- 五、使用许可
- 六、参考
acl 工程是一个跨平台(支持LINUX,WIN32,Solaris,MacOS,FreeBSD)的网络通信库及服务器编程框架,同时提供更多的实用功能库。通过该库,用户可以非常容易地编写支持多种模式(多线程、多进程、非阻塞、触发器、UDP方式、协程方式)的服务器程序,WEB 应用程序,数据库应用程序。此外,该库还提供了常见应用的客户端通信库(如:HTTP、SMTP、ICMP、redis、memcache、beanstalk、handler socket),常见流式编解码库:XML/JSON/MIME/BASE64/UUCODE/QPCODE/RFC2047 etc。
本工程主要包含 5 个库及大量示例。5 个库的说明如下:
- lib_acl: 该库是最基础的库,其它 4 个库均依赖于该库; 该库以 C 语言实现。
- lib_protocol: 该库主要实现了 http 协议及 icmp/ping 协议; 该库以 C 语言实现。
- lib_acl_cpp: 该库用 C++ 语言封装了 lib_acl/lib_protocol 两个库,同时增加了一些其它有价值的功能应用。
- lib_fiber: 该库为支持协程库,直接 hook 系统 read/write 等 API,与 epoll 配合支持高并发网络编程。
- lib_dict: 该库主要实现了 KEY-VALUE 的字典式存储库,该库另外还依赖于 BDB, CDB 以及 tokyocabinet 库。
- lib_tls: 该库封装了 openssl 库,使 lib_acl 的通信模式可以支持 ssl。
该模块是整个 acl 网络通信最基础的流式通信模块,不仅支持网络流,同时还支持文件流,主要支持:
- 按行读数据,兼容 win32 下的 \r\n,同时兼容 UNIX 下的 \n 的结束符
- 按行读数据但要求自动去掉尾部的 \n 或 \r\n
- 以字符串为分隔符读取数据
- 读规定长度的数据
- 尝试性读一行数据或尝试性读规定长度数据
- 探测网络 IO 状态
- 写入一行数据
- 按格式符写入数据,类似于 fprintf
- 文件流定位操作,类似于 fseek
- 一次性写入一组数据,类似于 unix 下的 writev
- 将文件截短,类似于 ftrunk
- 获取文件大小
- 获得当前文件流指针位置,类似于 ftell
- 获得文件尺寸
- 获得网络流的本地地址及远程地址
该模块主要支持网络服务端监听(支持 TCP/UDP/UNIX 域套接口)、网络客户端连接(支持 TCP/UNIX 域套接口)、DNS 域名查询及结果缓存(支持调用系统 gethostbyname/getaddrinfo 函数和直接发送 DNS 协议两种方式)、套接口(socket)操作及取本机网卡等功能。
支持非阻塞方式连接、读(按行读,规定长度读)、写(写行,写规定长度,写一组数据)等操作。
主要支持常见网络应用协议,诸如:HTTP、SMTP、ICMP,其中 HTTP、ICMP 两个模块实现了阻塞、非阻塞两种通信方式;此外,HTTP 协议在C++版的 lib_acl_cpp 中还支持服务端、客户端两种通信方式,当作为服务端使用时,支持类似于 JAVA HttpServlet 的接口使用方式,当作为客户端方式使用时,支持连接池与集群管理方式,该模块同时支持 cookie、session、HTTP MIME 文件上传、分块传输、字符集自动转换、自动解压缩、断点续传等丰富的功能。
支持 memcached、beanstalk、handler socket 客户端通信库,该通信库支持连接池方式。
支持 select(UNIX/LINUX/WIN32)、poll(UNIX/LINUX)、epoll(LINUX)、kqueue(BSD)、devpoll(solaris)、iocp(WIN32)、窗口消息(WIN32) 等系统事件引擎,同时支持 Reactor 及 Proactor 两种编程模型。