acl库介绍

上传人:豆浆 文档编号:10176300 上传时间:2017-08-12 格式:PPTX 页数:36 大小:542.96KB
返回 下载 相关 举报
acl库介绍_第1页
第1页 / 共36页
acl库介绍_第2页
第2页 / 共36页
acl库介绍_第3页
第3页 / 共36页
acl库介绍_第4页
第4页 / 共36页
acl库介绍_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《acl库介绍》由会员分享,可在线阅读,更多相关《acl库介绍(36页珍藏版)》请在金锄头文库上搜索。

1、ACL 介绍,-郑树新,目录,ACL 是什么ACL 应用场景ACL 谁在用ACL 模块划分ACL 服务器框架ACL 通信模块ACL 日志模块ACL 编程示例ACL 编译安装ACL 相关资源,ACL 是什么?,ACL (全称 Advanced C Library),是一组跨平台的 C/C+ 网络通讯及服务器框架库,目前支持的平台:Windows/Linux/BSD/Solaris/MAC ACL 还包括网络应用常用的功能库,如:xml,json,http,icmp,dns,memcache,mime,smtp,mysql/sqlite,handlersocket,beanstalk,多种编码(如

2、:base64/mime base64,urlcode,qp,hex,charset,etc),常用数据结构(如:hash,array,ring,fifo,二分块查找,stack,avl,etc),线程池,etcACL 的设计原则:从实用角度 出发,结合常见应用场景,为开发者提供快速开发、稳定可靠的通信框架及服务框架,应用场景,一、服务器编程:Linux/Unix 平台下常见服务器编程(含 mysql/sqlite 数据库编程)二、网络编程:阻塞方式(ssl)/非阻塞方式(ssl),支持常见的通信协议如下:三、WIN32 界面相关的网络编程,谁在用 ACL?,某财经类网站:行情服务器,缓存服务

3、器等某企业应用:反垃圾网关,用户认证等某企业应用:IM服务端,邮件服务端等某些小的团队及个人:游戏服务端、视频服务等一些爱好者(如淘宝的:http:/ 模块划分,主要包含 6 个库及大量示例,6 个库的说明如下:1) lib_acl: 基础核心库,其它库均依赖于该库( C 语言)2) lib_protocol: 实现了 http/icmp 协议(C语言)3) lib_acl_cpp: 封装了 lib_acl/lib_protocol 两个库,同时增加了一些其它有价值的功能(C+语言)4) lib_dict: 实现了 KEY-VALUE 的字典式存储库,该库还依赖于 BDB, CDB 以及 to

4、kyocabinet 库(C语言)5) lib_tls: 封装了 openssl 库(C语言)6) lib_rpc:目前仅支持 google protocol-buffer(C+)大量示例:1)acl/samples: 主要是 lib_acl /lib_protocol 库的例子2)acl/lib_acl_cpp/samples: 主要是 lib_acl_cpp 库的例子,lib_acl基础库,stdlib: 配置文件、日志记录、网络/文件流读写、内存管理、常用数据结构、字符串处理、目录遍历等net: 客户端/服务端接口、DNS查询、网络套接字、常用TCP控制等aio: 非阻塞 IO 模块(读

5、、写、连接、监听)master: 服务器编程框架(进程池模式、多进程多线程模式、多进程非阻塞模式、多进程触发器模式)thread: 线程、线程池、线程锁等event: IO 事件引擎(支持 select、poll、epoll、kqueue、devpoll、iocp、win32 消息)json/xml: 支持josn/xml编解码db: 内存DB库、mysql 客户端库、zdb 数字K-V库unit_test: 配置选项驱动的单元测试模块,Lib_acl 结构体全景图,lib_protocol 库,http 协议库:比较完整的HTTP协议库,支持HTTP1.0/1.1版本数据传输、协议解析等功能

6、,可用于客户端,也可用于服务端;同时支持阻塞及非阻塞方式传输smtp 协议库: 客户端传输库,支持SASL身份验证icmp/ping: 客户端库,支持阻塞及非阻塞方式,lib_acl_cpp 库,stdlib: 含字符串处理、字符集转换(Linux下封装了iconv库,win32下封装了平台相关库)、xml/json编解码、日志、md5、zlib封装等stream: 网络/文件流,支持阻塞非阻塞方式及ssl 加密传输、客户端/服务端套接字http: 功能丰富的 HTTP 协议库,支持客户端/服务端模式,http cookie/session 管理、类似Java HttpServlet 编程接口

7、、HTTP mime 格式等master: 服务器框架库,支持进程池(master_proc类)、多进程多线程(master_threads类)、多进程非阻塞(master_aio)、触发器(master_trigger) 四种服务器方式mime: 完整的流式mime解析库,含mime、rfc2047、rfc822 等格式解析ipc: 阻塞非阻塞模式通讯的交互接口,支持win32窗口消息queue: 磁盘文件队列管理模块其它常用协议客户端库:db: 数据库操作客户端库(支持mysql/sqlite),支持连接池memcache : memcached 协议的客户端库,支持长连接重试hsocke

8、t: mysqld 的 nosql 插件 handlersocket 的客户端库,支持连接池及连接重试beanstalk: 消息队列服务 beanstalkd 的客户端库,支持连接池及连接重试,Lib_acl_cpp 功能类全景图,ACL 服务框架,ACL 的服务器框架模块是在 Postfix 的 master 框架基础上改造而来,Postfix 的服务器框架主要有以下特点:1、稳定:主控进程(master)监控所有子进程的运行状态,子进程异常行为可控2、安全:子进程以普通用户身份运行3、协作:主控进程与子进程通过管道进行协作,主控进程按需分配新的子进程4、资源可控:子进程为半驻留服务方式,可

9、在完成一定任务量或空闲一定时间后主动退出5、模块化:每种服务为独立程序,有多个服务器模型根据需要选择,master 主控进程流程图,master 子进程流程图,ACL 服务器框架特点,ACL 服务器框架特点,ACL 通信模块,一、ACL 的通信模块分类:1、处理方式:阻塞式 IO 与非阻塞 IO2、处理对象:TCP 流与文件流二、lib_acl(C库) 及 lib_acl_cpp(C+)1、lib_acl: ACL_VSTREAM 为最基础的流对象(acl_vstream.h, acl_vstream.c),支持TCP/文件流;ACL_ASTREAM 为非阻塞网络流(aio 模块)2、lib_

10、acl_cpp: stream 流模块下封装了 lib_acl 库的阻塞/非阻塞流模块,同时支持ssl加密传输(结合polarssl)三、ACL 网络流使开发者1、不必关心底层复杂冗余的处理细节2、常用的读写操作:读指定长度、读一行(兼容n及rn)、读标志串、超时读、探测读;写固定长度、按格式写、写一行、写一组数据;阻塞/非阻塞读写、加密传输等,ACL 阻塞IO流(C+),ACL 非阻塞IO流(C+),Acl 常用网络应用客户端库,一、常用网络客户端端库http、mysql、beanstalk、memcache、handlersocket、smtp二、客户端库支持长连接及重连功能(smtp/h

11、andlersocket 除外)三、支持连接池的客户端库:mysql、beanstalk,ACL 日志模块,ACL 分级日志示例(C接口)ACL 分级日志示例(C+接口)ACL 日志输出目标,ACL 分级日志示例(C接口),/ 分组日志接口/* 初始化日志类别记录 */ const char *str = 101:2; 103:4; 105:3; /* 记录所有类别值为 101 级别小于等于 2、类别值为 102 级别小于等于 4、类别值为 105 级别小于等于 3 的日志内容 */ acl_debug_init(str); . /* 下面的日志因符合类别值 101 级别值 = 2 而被记录

12、*/ acl_debug(101, 2)(%s(%d): log time: %ld, _FILE_, _LINE_, time(NULL); /* 下面日志符合类别 105 的记录级别 */ acl_debug(105, 1)(%s(%d): log time: %ld, _FILE_, _LINE_, time(NULL); /* 下面的日志因不符合类别值 103 的记录级别条件而被忽略 */ acl_debug(103, 5)(%s(%d): log time: %ld, _FILE_, _LINE_, time(NULL); /* 下面日志的类别值 102 因不存在而被忽略 */ ac

13、l_debug(102, 1)(%s(%d): log time: %ld, _FILE_, _LINE_, time(NULL);/ 其它的日志记录接口acl_msg_info、acl_msg_warn、acl_msg_error、acl_msg_fatal,ACL 分级日志示例(C+接口),/ 通用日志记录接口logger(const char* fmt, );logger_warn(const char* fmt, );logger_error(const char* fmt, );logger_fatal(const char* fmt, );/ 分组分级日志记录接口logger_de

14、bug(DEBUG_LABLE, DEBUG_LEVEL, const char* fmt, );,ACL 日志输出目标,一、可以同时输出至多个目标对象const char *logs = “./log1.log|./log2.log”;acl_msg_open(logs, “myproc”);Or acl:logger_open(logs, “myproc”);二、可以与syslog-ng结合,充分利用 syslog-ng 的特性const char* logs = “./log1.log|UDP:192.168.1.1:12345|TCP:192.168.1.2:12345”;三、允许以接

15、口注册方式集成第三方日志库ACL_API void acl_msg_register(ACL_MSG_OPEN_FN open_fn, ACL_MSG_CLOSE_FN close_fn, ACL_MSG_WRITE_FN write_fn, void *ctx);,ACL 编程示例,一、一个简单的网络客户端二、一个简单的网络服务端三、ACL 线程池示例四、ACL 的流式编程示例五、基于 acl_master 框架服务器程序,一个简单的网络客户端,bool client_request()const char* addr = “127.0.0.1:8190”; / 服务器地址(ip:port,

16、 domain:port)int conn_timeout = 10, rw_timeout = 30; / 连接超时及读写超时时间(秒)acl:socket_stream conn; / 客户端连接流对象if (conn.open(addr, conn_timeout, rw_timeout) = false) / 连接服务器printf(“connect server %s failedrn”, addr);return false;if (conn.format(“hello worldrn”) = -1) / 向服务端写入一行数据printf(“write one line to %s errorrn”, addr);return false;acl:string buf; / 缓冲区对象if (conn.gets(buf, true) = false) / 从服务器读取一行数据,且去除尾部的 n 或 rnprintf(“get line from %s errorrn”, addr);return false;return true;,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号