Skip to content

Latest commit

 

History

History
860 lines (740 loc) · 36.7 KB

File metadata and controls

860 lines (740 loc) · 36.7 KB

English

Acl -- 强大的跨平台 C/C++ 网络通信库与服务框架

0. 关于 Acl 项目

Acl(Advanced C/C++ Library,先进的 C/C++ 库)是一个功能强大的跨平台网络通信库和服务器编程框架,支持 Linux、Windows、Solaris、FreeBSD、macOS、Android、iOS 及鸿蒙系统。众多基于 Acl 开发的应用程序运行在各类设备上,为上亿用户提供稳定可靠的服务。

Acl 项目包含丰富的功能模块:网络通信、服务器框架、应用协议、多种编解码器等。内置实现了常用网络协议,如 HTTP/SMTP/ICMP/MQTT/Redis/Memcached/Beanstalk/Handler Socket 等,以及完整的编解码库,如 XML/JSON/MIME/BASE64/UUCODE/QPCODE/RFC2047/RFC1035 等。此外,Acl 还为主流数据库(MySQL、PostgreSQL、SQLite)提供了统一的抽象接口,让开发者能够更加轻松、快速、安全地编写数据库应用程序。

软件架构图

整体架构图



1. 六个核心模块

作为一个功能完备的 C/C++ 基础库,Acl 为应用程序开发提供了丰富而实用的功能。其中最核心的六大模块包括:网络通信、协程、HTTP、Redis 客户端、MQTT 和服务器框架。

1.1. 基础网络模块

流处理模块
该模块是整个 Acl 网络通信的基石,提供统一的流式通信接口,同时支持网络流和文件流。主要功能包括:

  • 按行读取数据,自动兼容 Windows 下的 \r\n 和 UNIX 下的 \n 结尾符
  • 按行读取数据并自动删除尾部的换行符(\n\r\n
  • 以自定义字符串分隔符读取数据
  • 读取指定长度的数据
  • 尝试性读取一行数据或指定长度数据
  • 检测网络 IO 状态
  • 写入一行数据
  • 格式化写入数据(类似于 fprintf
  • 文件流定位操作(类似于 fseek
  • 批量写入数据(类似于 UNIX 的 writev
  • 截断文件(类似于 ftruncate
  • 获取文件大小和当前文件流指针位置(类似于 ftell
  • 获取网络流的本地地址和远程地址

网络操作模块
该模块提供完整的网络操作功能,包括:

  • 网络服务器监听(支持 TCP/UDP/UNIX 域套接字)
  • 网络客户端连接(支持 TCP/UNIX 域套接字)
  • DNS 域名查询和结果缓存(支持系统 API 调用和直接 DNS 协议两种方式)
  • 套接字(socket)操作及本地网卡信息获取

非阻塞网络流
全面支持非阻塞模式的网络操作,包括非阻塞连接、读取(按行读取、指定长度读取)、写入(按行写入、指定长度写入、批量写入)等。

常见网络应用协议库
内置实现了常用网络应用协议,如 HTTP、SMTP、ICMP 等,其中 HTTP 和 ICMP 模块同时支持阻塞和非阻塞通信方式。HTTP 协议在 C++ 版本的 lib_acl_cpp 中提供了服务器端和客户端两种模式:

  • 服务器端模式:提供类似 Java HttpServlet 的接口,支持 Cookie、Session、HTTP MIME 文件上传等功能
  • 客户端模式:支持连接池和集群管理、分块传输、自动字符集转换、自动解压缩、断点续传等丰富特性

常见网络通信库
提供 Memcached、Beanstalk、Handler Socket 等客户端通信库,均支持连接池模式。

1.2. 协程

Acl 的协程模块是一个成熟稳定的跨平台协程库,已在众多重要项目中得到广泛应用和验证。

平台支持

  • 支持 Linux、macOS、Windows、iOS 和 Android 等主流操作系统
  • 支持 x86、ARM 等多种 CPU 架构
  • 支持 select/poll/epoll/kqueue/iocp/win32 GUI 消息等多种事件引擎

核心特性

  • 完整的 DNS 协议实现:DNS 协议已在协程中原生实现,DNS API 可直接在协程中使用
  • 系统 API Hook:在 Unix 和 Windows 平台上自动 Hook 系统 IO API,实现协程化
    • 读取 API:read/readv/recv/recvfrom/recvmsg
    • 写入 API:write/writev/send/sendto/sendmsg/sendfile64
    • 套接字 API:socket/listen/accept/connect/setsockopt
    • 事件 API:select/poll/epoll_create/epoll_ctl/epoll_wait
    • DNS API:gethostbyname/gethostbyname_r/getaddrinfo/freeaddrinfo
  • 共享栈模式:支持共享栈模式,可显著降低内存占用

同步原语

  • 协程互斥锁信号量:用于协程间同步
  • 协程事件:支持协程与线程间的同步通信

更多详细信息,请参见 使用 Acl 协程库

1.3. HTTP 模块

完整实现 HTTP/1.1 协议,同时支持客户端和服务器端应用开发。

主要特性

  • 类 Java HttpServlet 接口(服务器端):提供熟悉的编程接口,降低学习成本
  • 连接池模式(客户端):高效管理连接资源,提升性能
  • 分块传输(Chunked Transfer):支持流式数据传输
  • 压缩传输:内置 Gzip 压缩/解压缩支持
  • SSL/TLS 加密:支持安全加密传输
  • 断点续传:支持大文件的断点续传功能
  • Cookie 管理:完整的 Cookie 设置和获取功能
  • Session 管理(服务器端):内置会话管理机制
  • WebSocket 支持:支持 WebSocket 协议
  • HTTP MIME 格式:支持 MIME 多部分数据格式
  • 同步/异步模式:灵活选择通信模式

1.4. Redis 客户端

Acl 的 Redis 客户端模块功能强大、性能卓越且易于使用,是生产环境的理想选择。

功能特性

  • 丰富的命令支持:支持 Bitmap/String/Hash/List/Set/Sorted Set/PubSub/HyperLogLog/Geo/Script/Stream/Server/Cluster 等 Redis 数据类型和命令
  • STL 风格接口:为每个 Redis 命令提供类似 STL 的 C++ 接口,符合 C++ 编程习惯
  • 智能集群管理:客户端自动缓存和适应 Redis 集群哈希槽的变化,无需手动干预
  • 多种通信模式:支持单机、集群和 Pipeline 模式,接口统一
  • 连接池支持:内置连接池,支持单机和集群模式,提升资源利用率
  • 高性能:在集群和 Pipeline 模式下表现出色
  • 自动重试:网络错误时自动重试,提高可靠性
  • 协程友好:可在共享栈协程模式下使用

更多详细信息,请参见 使用 Acl Redis 客户端

1.5. MQTT 模块

Acl 完整实现了 MQTT 3.1.1 协议,采用流式解析器设计,可灵活适配各种 IO 模式。

核心特性

  • 完整的 MQTT 3.1.1 协议支持:实现了所有标准命令
    • CONNECT/CONNACK/PUBLISH/PUBACK/PUBREC/PUBREL/PUBCOMP
    • SUBSCRIBE/SUBACK/UNSUBSCRIBE/UNSUBACK
    • PINGREQ/PINGRESP/DISCONNECT
  • 面向对象设计:每个 MQTT 命令对应一个独立的类,结构清晰
  • 流式解析器:独立于 IO 模式,可与任何网络通信方式结合
  • 解析与通信分离:数据解析与网络通信完全解耦,灵活性高
  • 双端支持:可同时用于客户端和服务器端开发

更多详细信息,请参见 使用 Acl MQTT

1.6. 服务器框架

服务器框架是 Acl 中最核心的模块,帮助开发者快速构建高性能的后端服务(如 Web 服务)。通过 app/wizard 中的代码生成工具,可在几秒钟内生成完整的服务代码框架。

架构设计
Acl 服务器框架由两部分组成:

  1. 服务管理器(acl_master):源自著名的 Postfix MTA 的 master 进程,经过大量扩展成为通用的服务管理器
  2. 服务模板:提供多种服务模板供开发者选择

六种服务模板

  • 进程服务模型
    一个连接对应一个进程。

    • 优点:编程简单、安全稳定
    • 缺点:并发能力有限
    • 适用场景:对安全性要求高、并发量不大的场景
  • 线程服务模型
    每个进程通过线程池处理所有客户端连接,采用 IO 事件触发机制。

    • 优点:用少量线程处理大量连接,编程相对简单
    • 特点:连接有数据时才绑定线程,处理完立即释放
    • 适用场景:高并发场景,比 AIO 模型更易开发
  • AIO 服务模型(非阻塞)
    类似 Nginx/Squid/IRCd,单线程以非阻塞 IO 方式处理大量连接。

    • 优点:处理效率高、资源消耗低
    • 缺点:编程复杂度较高
    • 适用场景:超高并发、对性能要求极高的场景
  • 协程服务模型
    结合了非阻塞模型的高并发能力和同步编程的简单性。

    • 优点:高并发 + 低编程复杂度,顺序 IO 编程方式
    • 特点:自动将阻塞操作转换为非阻塞过程,提升并发能力
    • 适用场景:高并发场景的首选,兼顾性能和开发效率
  • UDP 服务模型
    专门用于 UDP 通信的服务模型。

    • 适用场景:需要 UDP 协议的应用
  • 触发器服务模型
    用于处理定时任务的后台服务(类似系统的 crontab)。

    • 适用场景:定时任务、后台调度

2. 其他重要模块

2.1. MIME 模块

MIME(多用途互联网邮件扩展)是一种重要的数据格式标准,广泛应用于电子邮件和 Web 应用程序。

功能特性

  • 完整实现 MIME 相关 RFC 标准:RFC2045/RFC2047/RFC822
  • 提供独立于 IO 模型的流式 MIME 数据解析器
  • 可灵活用于同步或异步 IO 程序
  • 支持 MIME 数据的解析和构建

2.2. 编解码模块

Acl 提供了丰富的编解码器,所有编解码器均采用流式解析设计,独立于 IO 通信层。

支持的编解码格式

  • JSON:流式 JSON 解析器和构建器,支持 JSON 与 C 结构体的序列化/反序列化,大幅提升开发效率
  • XML:流式 XML 解析器和构建器
  • Base64:Base64 编解码
  • URL:URL 编解码
  • 其他:UUCODE、QPCODE、RFC2047 等

2.3. 数据库模块

Acl 提供了统一的数据库抽象接口,简化数据库应用开发。

核心特性

  • 统一接口:为 MySQL、PostgreSQL、SQLite 提供统一的操作接口
  • SQL 安全:内置 SQL 编解码器,自动转义特殊字符,有效防止 SQL 注入攻击
  • 动态加载:采用动态库加载方式,不使用数据库功能时无需关心依赖
  • 连接池支持:内置数据库连接池管理

2.4. 连接池管理器

Acl 提供了通用的连接池管理器,被广泛应用于Acl库各个客户端通信模块。

应用场景

  • Redis 客户端连接池
  • 数据库连接池
  • HTTP 客户端连接池
  • 其他网络客户端连接池

2.5. 其他客户端库

除 Redis 客户端外,Acl 还实现了多种常用的客户端通信库。

支持的客户端

  • Memcached:支持连接池
  • Handler Socket:MySQL 的 Handler Socket 插件客户端
  • Beanstalk:消息队列客户端
  • Disque:分布式消息队列客户端

2.6. DNS 模块

Acl 提供了完整的 DNS 解决方案,既可以使用系统 API,也可以直接实现 DNS 协议。

功能特性

  • 系统 API 封装:封装 getaddrinfogethostbyname 等系统 API
  • 协议实现:完整实现 RFC1035 规定的 DNS 协议
  • 双端支持:可用于实现 DNS 客户端或 DNS 服务器
  • 结果缓存:支持 DNS 查询结果缓存,提升性能

3. 平台支持和编译

3.1. 在不同平台上编译 Acl

Acl 是一个跨平台库,支持主流操作系统和多种编译工具链。

支持的平台

  • Linux、Windows、macOS、FreeBSD、Solaris
  • Android、iOS、鸿蒙(Harmony)

编译方式

Linux/UNIX 平台

  • 编译器:gcc/clang

  • Make 方式

    cd acl/
    make

    编译完成后会在 acl/ 目录生成:

    • libacl_all.a(静态库,包含 lib_acl.a、lib_protocol.a 和 libacl_cpp.a)
    • libacl_all.so(动态库)
  • CMake 方式

    ./cmake-build.sh
  • XMake 方式

    xmake

Windows 平台

  • 支持 Visual Studio 2003/2008/2010/2012/2013/2015/2019 等版本
  • 如需使用 VS6/VS2005,可参考 VS2003 的编译配置

macOS/iOS 平台

  • 使用 Xcode 进行编译

Android 平台

  • 使用 Android Studio 打开 acl/android/acl_ndk20b/ 项目

鸿蒙(Harmony)平台

  • 使用 DevEco Studio 打开 acl/harmony/api13/ 项目

跨平台编译

  • 支持使用 CMake 进行跨平台编译

3.2. Windows 平台编译注意事项

在 Windows 环境下使用 Acl 动态库时,需要在项目中添加相应的预定义宏。

预定义宏说明

使用的库 需要预定义的宏 说明
lib_acl 动态库 ACL_DLL 基础库
lib_protocol HTTP 库 HTTP_DLL HTTP 协议库
lib_protocol ICMP 库 ICMP_DLL ICMP 协议库
lib_acl_cpp 动态库 ACL_CPP_DLL C++ 库

详细说明

4. 快速开始

4.1. 第一个 Acl 示例

这是一个最简单的 Acl 程序,展示如何使用 Acl 的字符串类。

#include <iostream>
#include "acl_cpp/lib_acl.hpp"

int main() {
  acl::string buf = "hello world!\r\n";
  std::cout << buf.c_str() << std::endl;
  return 0;
}

4.2. 简单的 TCP 服务器

这个示例展示如何使用 Acl 创建一个简单的 TCP 回显服务器,使用多线程处理客户端连接。

#include <thread>
#include "acl_cpp/lib_acl.hpp"

void run() {
  const char* addr = "127.0.0.1:8088";
  acl::server_socket server;
  if (!server.open(addr)) {  // 绑定并监听本地地址。
    return;
  }

  while (true) {
    acl::socket_stream* conn = server.accept(); // 等待连接。
    if (conn == NULL) {
      break;
    }
    std::thread thread([=] {  // 启动一个线程来处理连接。
      char buf[256];
      int ret = conn->read(buf, sizeof(buf), false);  // 读取数据。
      if (ret > 0) {
        conn->write(buf, ret);  // 写入接收到的数据。
      }
      delete conn;
    });
    thread.detach();
  }
}

4.3. 简单的 TCP 客户端

这个示例展示如何使用 Acl 创建一个 TCP 客户端,连接服务器并进行数据收发。

#include "acl_cpp/lib_acl.hpp"

void run() {
  const char* addr = "127.0.0.1:8088";
  int conn_timeout = 5, rw_timeout = 10;
  acl::socket_stream conn;
  if (!conn.open(addr, conn_timeout, rw_timeout)) { // 连接服务器。
    return;
  }
  const char data[] = "Hello world!\r\n";
  if (conn.write(data, sizeof(data) - 1) == -1) {  // 向服务器发送数据。
    return;
  }
  char buf[256];
  int ret = conn.read(buf, sizeof(buf) - 1, false);
  if (ret > 0) {  // 从服务器读取。
    buf[ret] = 0;
    std::cout << buf << std::endl;
  }
}

4.4. 协程 TCP 服务器

这个示例展示如何使用 Acl 协程创建高并发的 TCP 服务器,用顺序编程方式实现异步处理。

#include "acl_cpp/lib_acl.hpp"
#include "fiber/go_fiber.hpp"

void run() {
  const char* addr = "127.0.0.1:8088";
  acl::server_socket server;
  if (!server.open(addr)) {
    return;
  }

  go[&] {  // 创建一个服务器协程来等待连接。
    while (true) {
      acl::shared_stream conn = server.shared_accept();
      if (conn == nullptr) {
        break;
      }

      go[conn] {  // 创建一个客户端协程来处理连接。
        while (true) {
          char buf[256];
          int ret = conn->read(buf, sizeof(buf), false);
          if (ret <= 0 || conn->write(buf, ret) != ret) {
            break;
          }
        }
      };
    }
  };

  acl::fiber::schedule();  // 启动协程调度过程。
}

4.5. HTTP 客户端示例

这个示例展示如何使用 Acl 创建 HTTP 客户端,发送 HTTP 请求并获取响应。

#include "acl_cpp/lib_acl.hpp"

bool run() {
  acl::http_request conn("www.baidu.com:80");
  acl::http_header& header = conn.request_header()
  header.set_url("/")
    .set_keep_alive(false);
    .set_content_type("text/html");

  if (!conn.request(NULL, 0)) {
    return false;
  }
  int status = conn.http_status();
  if (status != 200) {
    return false;
  }
  long long len = conn.body_length();
  if (len <= 0) {
    return true;
  }
  acl::string buf;
  if (!conn.get_body(body)) {
    return false;
  }
  return true;
}

4.6. 协程 HTTP 服务器

这个示例展示如何使用 Acl 协程创建一个功能完整的 HTTP 服务器,支持路由、配置管理等特性。

#include "acl_cpp/lib_acl.hpp"  // 必须在 http_server.hpp 之前
#include "fiber/http_server.hpp"

static char *var_cfg_debug_msg;
static acl::master_str_tbl var_conf_str_tab[] = {
  { "debug_msg", "test_msg", &var_cfg_debug_msg },
  { 0, 0, 0 }
};

static int  var_cfg_io_timeout;
static acl::master_int_tbl var_conf_int_tab[] = {
  { "io_timeout", 120, &var_cfg_io_timeout, 0, 0 },
  { 0, 0 , 0 , 0, 0 }
};

int main(int argc, char* argv[]) {
  const char* addr = "0.0.0.0|8194";
  const char* conf = argc >= 2 ? argv[1] : NULL;
  acl::http_server server;

  // 调用 acl::master_base 类中的方法。
  server.set_cfg_int(var_conf_int_tab).set_cfg_str(var_conf_str_tab);

  // 调用 acl::http_server 中的方法。
  server.on_proc_init([&addr] {
    printf("---> after process init: addr=%s, io_timeout=%d\r\n", addr, var_cfg_io_timeout);
  }).on_proc_exit([] {
    printf("---> before process exit\r\n");
  }).on_proc_sighup([] (acl::string& s) {
    s = "+ok";
    printf("---> process got sighup\r\n");
    return true;
  }).on_thread_accept([] (acl::socket_stream& conn) {
    printf("---> accept %d\r\n", conn.sock_handle());
    return true;
  }).Get("/", [](acl::HttpRequest&, acl::HttpResponse& res) {
    std::string buf("hello world1!\r\n");
    res.setContentLength(buf.size());
    return res.write(buf.c_str(), buf.size());
  }).Post("/json", [](acl::HttpRequest& req, acl::HttpResponse& res) {
    acl::json* json = req.getJson();
    if (json) {
      return res.write(*json);
    } else {
      std::string buf = "no json got\r\n";
      res.setContentLength(buf.size());
      return res.write(buf.c_str(), buf.size());
    }
  }).run_alone(addr, conf);

  return 0;
}

4.7. Redis 客户端示例

这个示例展示如何使用 Acl Redis 客户端进行多线程操作,包括连接池管理和基本的 Redis 命令。

#include <thread>
#include "acl_cpp/lib_acl.hpp"

static void thread_run(acl::redis_client_cluster& conns) {
  acl::redis cmd(&conns);
  std::map<acl::string, acl::string> attrs;
  attrs["name1"] = "value1";
  attrs["name2"] = "value2";
  attrs["name3"] = "value3";
  acl::string key = "hash-key-1";
  if (!cmd.hmset(key, attrs)) {
    printf("hmset error=%s\r\n", cmd.result_error());
    return;
  }

  attrs.clear();
  if (!cmd.hgetall(key, attrs)) {
    printf("hgetall error=%s\r\n", cmd.result_error());
  }
}

void run() {
  const char* addr = "126.0.0.1:6379";
  acl::redis_client_cluster conns;
  conns.set(addr, 0);

  const size_t nthreads = 10;
  std::thread threads[nthreads];
  // 创建一些线程来使用相同的 conns 测试 redis。
  for (size_t i = 0; i < nthreads; i++) {
    threads[i] = std::thread(thread_run, std::ref(conns));
  }
  // 等待所有线程退出
  for (size_t i = 0; i < nthreads; i++) {
    threads[i].join();
  }
}

5. 更多信息

5.1. 示例代码

Acl 库提供了大量的示例代码供学习参考,涵盖各个功能模块的使用方法。

示例索引SAMPLES.md

5.2. 更多简单示例

为了帮助开发者快速上手,我们提供了大量简单易懂的小示例。

示例仓库Acl Demos

5.3. 常见问题(FAQ)

在使用 Acl 过程中遇到问题?请查看常见问题解答。

FAQ 文档FAQ.md

5.4. 开源许可证

Acl 采用 LGPL-v2.1 开源许可证,可自由用于商业和非商业项目。

许可证详情LICENSE.txt

5.5. 相关链接

官方资源

社区交流

  • 💬 QQ 群:705290654

5.6. 致谢

感谢 为 Acl 项目提供的支持。

6. 附录

6.1. 软件分层架构

┌─────────────────────────────────────────────────────────┐
│                   应用层 (Application)                   │
│  业务代码、HTTP服务器、WebSocket服务、Redis客户端等          │
└─────────────────────────────────────────────────────────┘
                          ↓
┌────────────────────────────────────────────────────────┐
│             高级抽象层 (High-level API)                  │
│  ┌──────────┬──────────┬──────────┬──────────┐         │
│  │  HTTP    │  Redis   │   MQTT   │   DB     │         │
│  │ 模块      │  模块    │  模块     │  模块     │         │
│  └──────────┴──────────┴──────────┴──────────┘         │
│  ┌──────────┬──────────┬──────────┬──────────┐         │
│  │  Master  │  Fiber   │ ConnPool │  Stream  │         │
│  │  框架     │  协程库   │  连接池   │  流处理   │         │
│  └──────────┴──────────┴──────────┴──────────┘         │
└────────────────────────────────────────────────────────┘
                          ↓
┌─────────────────────────────────────────────────────────┐
│             核心库层 (Core Library)                      │
│  - 网络 I/O (socket, stream, aio)                       │
│  - 事件驱动 (event, epoll, kqueue, iocp)                 │
│  - 内存管理 (memory pool, dbuf)                          │
│  - 数据结构 (string, array, hash, list)                  │
│  - 工具类 (log, config, thread, process)                 │
└─────────────────────────────────────────────────────────┘
                          ↓
┌───────────────────────────────────────────────────────---─---─┐
│             操作系统层 (OS Layer)                               │
│  Linux / FreeBSD / macOS / Windows / Android / iOS / Harmony  │
└────────────────────────────────────────────────────────------─┘

6.2. 项目目录结构

acl/
├── lib_acl/                    # 核心 C 库(基础库)
│   ├── include/                # 公共头文件
│   ├── src/                    # 源代码实现
│   │   ├── stdlib/             # 标准库(字符串、内存、文件等)
│   │   │   ├── common/         # 通用数据结构(哈希表、链表、队列、树等)
│   │   │   ├── memory/         # 内存管理(内存池、slab、dbuf)
│   │   │   ├── string/         # 字符串操作
│   │   │   ├── filedir/        # 文件和目录操作
│   │   │   ├── configure/      # 配置文件解析
│   │   │   ├── iostuff/        # IO 工具函数
│   │   │   ├── debug/          # 调试工具
│   │   │   └── sys/            # 系统相关封装
│   │   ├── net/                # 网络模块
│   │   │   ├── connect/        # 客户端连接
│   │   │   ├── listen/         # 服务端监听
│   │   │   └── dns/            # DNS 解析
│   │   ├── event/              # 事件引擎(epoll/kqueue/iocp/select/poll)
│   │   ├── aio/                # 异步 IO 模块
│   │   ├── thread/             # 线程和线程池
│   │   ├── master/             # 服务器框架(进程管理)
│   │   │   └── template/       # 服务模板(进程/线程/aio/协程/UDP/触发器)
│   │   ├── db/                 # 数据库模块
│   │   │   ├── mysql/          # MySQL 支持
│   │   │   ├── memdb/          # 内存数据库
│   │   │   └── zdb/            # ZDB 存储引擎
│   │   ├── json/               # JSON 解析器
│   │   ├── xml/                # XML 解析器
│   │   ├── code/               # 编解码(base64/url/html 等)
│   │   ├── msg/                # 消息队列
│   │   ├── init/               # 初始化模块
│   │   ├── ioctl/              # IO 控制
│   │   ├── proctl/             # 进程控制(Windows)
│   │   └── unit_test/          # 单元测试框架
│   └── samples/                # 大量示例代码
│
├── lib_protocol/               # 协议库(C 实现)
│   ├── include/                # 协议头文件
│   ├── src/                    # 协议实现
│   │   ├── http/               # HTTP 协议
│   │   ├── icmp/               # ICMP/Ping 协议
│   │   └── smtp/               # SMTP 邮件协议
│   └── samples/                # 协议示例
│
├── lib_acl_cpp/                # C++ 封装库(高级功能)
│   ├── include/                # C++ 头文件
│   │   ├── acl_cpp/            # 主要头文件目录
│   │   │   ├── stdlib/         # 标准库封装
│   │   │   ├── stream/         # 流处理
│   │   │   ├── http/           # HTTP 客户端和服务端
│   │   │   ├── redis/          # Redis 客户端
│   │   │   ├── mqtt/           # MQTT 协议
│   │   │   ├── db/             # 数据库封装
│   │   │   ├── mime/           # MIME 协议
│   │   │   ├── master/         # Master 框架封装
│   │   │   ├── connpool/       # 连接池
│   │   │   ├── session/        # Session 管理
│   │   │   ├── memcache/       # Memcached 客户端
│   │   │   ├── beanstalk/      # Beanstalk 客户端
│   │   │   ├── disque/         # Disque 客户端
│   │   │   ├── hsocket/        # Handler Socket 客户端
│   │   │   ├── ipc/            # 进程间通信
│   │   │   ├── queue/          # 文件队列
│   │   │   ├── serialize/      # 序列化(JSON/Gson)
│   │   │   ├── aliyun/         # 阿里云 SDK(OSS)
│   │   │   └── event/          # 事件封装
│   ├── src/                    # C++ 源码实现
│   │   ├── stdlib/             # 标准库实现(string/logger/charset/zlib 等)
│   │   ├── stream/             # 流实现(socket/ssl/aio)
│   │   ├── http/               # HTTP 实现
│   │   │   ├── h2/             # HTTP/2 支持(待实现)
│   │   │   └── h3/             # HTTP/3 支持(待实现)
│   │   ├── redis/              # Redis 客户端实现
│   │   ├── mqtt/               # MQTT 协议实现
│   │   ├── db/                 # 数据库实现
│   │   ├── mime/               # MIME 实现
│   │   ├── master/             # Master 框架实现
│   │   ├── connpool/           # 连接池实现
│   │   ├── session/            # Session 实现
│   │   ├── memcache/           # Memcached 实现
│   │   ├── beanstalk/          # Beanstalk 实现
│   │   ├── disque/             # Disque 实现
│   │   ├── hsocket/            # Handler Socket 实现
│   │   ├── ipc/                # IPC 实现
│   │   ├── queue/              # 队列实现
│   │   ├── serialize/          # 序列化实现
│   │   ├── smtp/               # SMTP 实现
│   │   ├── aliyun/             # 阿里云客户端(待实现)
│   │   └── net/                # 网络工具(DNS)
│   └── samples/                # 丰富的示例代码
│       ├── http/               # HTTP 示例
│       ├── redis/              # Redis 示例
│       ├── mqtt/               # MQTT 示例
│       ├── db/                 # 数据库示例
│       ├── master/             # Master 框架示例
│       ├── fiber/              # 协程示例
│       └── ...                 # 更多示例
│
├── lib_fiber/                  # 协程库(核心特性)
│   ├── c/                      # C 语言实现
│   │   ├── include/            # 协程头文件
│   │   └── src/                # 协程源码
│   │       ├── common/         # 通用模块
│   │       ├── fiber/          # 协程核心
│   │       ├── event/          # 事件引擎
│   │       ├── sync/           # 同步原语(mutex/sem/event)
│   │       ├── hook/           # 系统 API Hook
│   │       └── ...
│   ├── cpp/                    # C++ 封装
│   │   ├── include/            # C++ 头文件
│   │   └── src/                # C++ 实现
│   ├── samples-c/              # C 语言示例
│   ├── samples-c++/            # C++ 示例
│   ├── samples-c++1x/          # C++11/14/17 示例
│   ├── samples-gui/            # GUI 示例(Windows)
│   └── unit_test/              # 单元测试
│
├── lib_dict/                   # 字典库(可选)
│   ├── bdb/                    # Berkeley DB 支持
│   ├── cdb/                    # CDB 支持
│   └── tc/                     # Tokyo Cabinet 支持
│
├── lib_tls/                    # TLS/SSL 库(可选)
│   └── src/                    # TLS 实现
│
├── lib_rpc/                    # RPC 库(实验性)
│   └── src/                    # RPC 实现
│
├── app/                        # 应用程序和工具
│   ├── wizard/                 # 代码生成向导(重要工具)
│   │   └── tmpl/               # 服务模板(进程/线程/aio/协程/UDP/触发器)
│   ├── wizard_demo/            # 向导生成的示例项目
│   ├── master/                 # Master 服务管理器
│   │   ├── daemon/             # 守护进程
│   │   ├── tools/              # 管理工具
│   │   └── ...
│   ├── jaws/                   # Web 应用服务器
│   ├── redis_tools/            # Redis 工具集
│   ├── net_tools/              # 网络工具
│   ├── gson/                   # JSON 序列化工具
│   ├── jencode/                # 编码转换工具
│   ├── iconv/                  # 字符集转换
│   └── ...
│
├── doc/                        # 文档目录
│   ├── README.md               # 文档索引
│   ├── fiber/                  # 协程文档
│   ├── http/                   # HTTP 文档
│   ├── redis/                  # Redis 文档
│   ├── mqtt/                   # MQTT 文档
│   ├── db/                     # 数据库文档
│   ├── master/                 # Master 框架文档
│   ├── stream/                 # Stream 文档
│   ├── mime/                   # MIME 文档
│   ├── connpool/               # 连接池文档
│   ├── rfc/                    # RFC 文档
│   └── ...
│
├── include/                    # 第三方库头文件
│   ├── mysql/                  # MySQL 头文件
│   ├── pgsql/                  # PostgreSQL 头文件
│   ├── sqlite/                 # SQLite 头文件
│   ├── openssl-1.1.1q/         # OpenSSL 头文件
│   ├── mbedtls/                # MbedTLS 头文件
│   ├── polarssl/               # PolarSSL 头文件
│   ├── zlib-1.2.11/            # Zlib 头文件
│   └── ...
│
├── lib/                        # 预编译库文件(按平台分类)
│   ├── linux64/                # Linux 64 位
│   ├── linux32/                # Linux 32 位
│   ├── win32/                  # Windows 32 位
│   ├── win64/                  # Windows 64 位
│   ├── macos/                  # macOS
│   ├── freebsd/                # FreeBSD
│   └── solaris/                # Solaris
│
├── android/                    # Android 平台支持
│   ├── acl_ndk20b/             # NDK r20b 项目
│   ├── acl_ndk28c/             # NDK r28c 项目
│   └── samples/                # Android 示例
│
├── harmony/                    # 鸿蒙平台支持
│   ├── api9/                   # HarmonyOS API 9
│   ├── api12/                  # HarmonyOS API 12
│   ├── api13/                  # HarmonyOS API 13
│   └── api16/                  # HarmonyOS API 16
│
├── xcode/                      # Xcode 项目(macOS/iOS)
│   └── ...                     # Xcode 工程文件
│
├── dist/                       # 安装目录(make install 后)
│   ├── include/                # 安装的头文件
│   ├── lib/                    # 安装的库文件
│   └── master/                 # Master 配置和脚本
│
├── unit_test/                  # 单元测试
│   └── ...                     # 测试用例
│
├── packaging/                  # 打包配置
│   └── ...                     # RPM 打包脚本
│
├── CMakeLists.txt              # CMake 构建配置
├── Makefile                    # 主 Makefile
├── xmake.lua                   # XMake 构建配置
├── README.md                   # 英文说明文档
├── README_CN.md                # 中文说明文档
├── SAMPLES.md                  # 示例代码索引
├── FAQ.md                      # 常见问题
├── BUILD.md                    # 编译说明
├── LICENSE.txt                 # 开源许可证
└── changes.txt                 # 更新日志