第一步

跑起来

2 分钟单头验证与四条网络实操路线。

第二步

接入工程

构建系统、发布形态与特性裁剪。

第三步

理解全貌

仓库结构、并发模型、模块地图与扩展库。

之后

学习与查阅

100 章教程、API 参考手册与稳定性证据。

准备:最小单头示例只需要 C11 编译器。运行仓库示例时,准备 Python 3,克隆 XRT 仓库,并在仓库根目录执行命令。本页面向 2.0.0-dev。
第一步 · 单头集成

用一个 C 文件,开始使用 XRT

打开仓库中的 single/xrt.h,通过 Raw / 下载按钮保存到当前目录,再新建 main.c。

获取 xrt.h →
main.c
#define XRT_IMPLEMENTATION
#include "xrt.h"
#include <stdio.h>

int main(void)
{
    printf("XRT %s\n", XRT_VERSION_TEXT);
    return 0;
}
Linux / macOS
cc -std=c11 -O2 main.c -o hello
./hello
Windows PowerShell / MinGW-w64
gcc -std=c11 -O2 main.c -o hello.exe
.\hello.exe

预期输出:XRT 2.0.0-dev。上方最小示例无需额外链接网络系统库;启用网络功能时,由仓库构建工具配置平台链接选项。

5 分钟 · xhttp

HTTP / HTTPS 客户端

从一个已验证的同步 GET 客户端开始,输出状态码与响应正文;下一步进入异步 Future、Cookie、重试和连接池。

示例:extlibs/xhttp/examples/http/client_easy/main.cHTTPS:client_https/main.c成功标准:收到状态码与响应正文
8 分钟 · 网络内核

TCP Echo 服务

启动回环监听、回显客户端数据,再按需深入硬背压、连接关闭与服务端生命周期。

示例:examples/network/tcp_server/main.c监听:127.0.0.1:动态端口成功标准:输出监听端点并完成一轮回显
10 分钟 · xhttp + TLS

TLS 请求与证书验证

使用系统信任库建立 HTTPS 请求。默认路径包含 DNS、TCP、TLS 1.3、SNI、证书身份验证与 HTTP/1.1。

示例:extlibs/xhttp/examples/http/client_https/main.c输入:一个 https:// URL成功标准:secure=yes 与响应大小
10 分钟 · xhttp

HTTP 服务端与健康检查

启动一个原始响应服务端,对 /health 返回 JSON;其他路径返回 404。它也是性能基准中 raw 路径的基础。

示例:extlibs/xhttp/examples/http/server_raw/main.c端点:/health成功标准:返回 {"code":200,"msg":"OK"}

构建系统与已验证示例

网络示例位于仓库 examples/ 与扩展库的 examples/, 可结合对应测试套件学习调用与生命周期。统一构建入口 tools/build.py 提供: SHA256 指纹增量编译、模块依赖闭包展开、Windows 长命令自动切换响应文件; GCC / Clang / MSVC(含 clang-cl)/ TCC 四族编译器可互换。build.bat 与 build.sh 只是它的薄封装。

仓库根目录 · 常用命令
git clone https://gitee.com/xywhsoft/xrt.git
cd xrt

# 默认:构建并运行内核测试(Windows 用 build.bat,Linux/macOS 用 ./build.sh)
python tools/build.py

# 指定套件:模块名、逗号组合或 all;--jobs 并行,--start-test 从失败处续跑
python tools/build.py --suite core,concurrency --jobs 4
python tools/build.py --suite all --start-test test_http_client

# 扩展库:叠加扩展清单
python tools/build.py --manifest extlibs/xhttp/config/modules.json --suite xhttp_tests
python tools/build.py --manifest extlibs/xws/config/modules.json --suite xws_tests

# 打包静态库 / 动态库,并编译运行消费者程序验证
python tools/package.py --kind static --verify
python tools/package.py --manifest extlibs/xhttp/config/modules.json --kind shared --verify

# 单头产物再生成(支持 --manifest 与 --check 漂移校验)
python tools/amalgamate.py
扩展库与内核联合编译:在同一源码树中叠加扩展清单,统一解析依赖、编译和验证。也可以选择内嵌内核的扩展单头用于集成。

选择发布形态

单头(适合快速集成)

main.c
/* single/xrt.h 自包含全部实现;扩展库同理(如 extlibs/xhttp/single/xhttp.h) */
#define XRT_IMPLEMENTATION
#include "xrt.h"

模块化 / 库(适合工程集成)

用 tools/package.py 产出静态库或动态库(含导入库),或直接把内核源码纳入你的构建—— 模块清单已经声明每个源文件的归属与依赖。头文件路径统一为 <xrt/xxx.h>。 按项目边界选择,而不是按术语选择:原型与工具用单头,产品构建用库。

特性裁剪体系

裁剪以模块宏为单位:定义 XRT_MODULE_<NAME> 后,include/xrt/features.h (由 tools/generate_features.py 从 modules.json 生成)自动展开其依赖闭包并置位对应的 XRT_FEATURE_* 宏;缺失依赖会在头文件中直接 #error。

裁剪示例
/* 只要 TCP 网络与协程 */
#define XRT_MODULE_NET_TCP
#define XRT_MODULE_COROUTINE
#include "xrt.h"

/* 全部启用 */
/* #define XRT_MODULE_ALL */

裁剪的正确性由两道门禁保证:

扩展库有平行的宏体系(XHTTP_MODULE_*、XWS_MODULE_*…),由 generate_extension_features.py 生成,并连锁要求内核模块宏。

认识 XRT

XRT 是一整套成体系的跨平台 C 基础设施库,目标是在互联网 + AI 时代提供零第三方运行时依赖的完整基础设施闭环。 v2.0 起,仓库分为两部分:

两种消费形态:模块化源码 / 静态库 / 动态库,或者自包含单头(内核与每个扩展库各有单头产物)。

仓库结构导览

目录内容
include/xrt/内核公开头文件。所有导出函数使用 XRT_API 宏与 xrt 前缀。
src/按能力领域组织的内核实现,配套 src/internal/ 私有契约头。
extlibs/五个扩展库。公开头沿用 xrt/ 命名空间安装(如 <xrt/http_client.h>),门面头为 <xhttp.h>、<xws.h> 等。
config/modules.json内核模块清单——单一事实源:每个模块的头文件、源码、测试、示例与依赖关系。
tools/工具链入口:build.py(构建)、package.py(打包)、amalgamate.py(单头合并)、measure_size / measure_performance(测量)、generate_features / generate_api_reference(生成器)。
tests/内核测试;tests/single/ 提供单头构建与调用探针。
examples/按模块组织的示例,从初始化、调用到资源释放展示完整流程。
single/内核单头产物 xrt.h / xrt_decl.h。
fuzz/libFuzzer 目标(HTTP/WS 协议等)。
dev/性能基准(带日期报告)、受控归档、开发流程资产。

并发模型:按问题选择,不必全都使用

线程、协程、Channel、Future、任务组与取消令牌分别解决不同边界。先确认工作是否需要真实并行、等待 I/O、传递消息、组合结果,还是需要统一停止;再选最小的一组机制。

机制优先使用的场景边界与下一步
线程与同步CPU 并行、阻塞接口集成、共享状态保护。使用 mutex / rwlock / cond / sem / once 明确共享边界;从 第 52 章 开始。
有栈协程与调度器I/O 等待、可读性优先的分步流程、定时与恢复。协程在调度器中协作运行,不替代 OS 线程;阅读 第 54 章、第 55 章。
Channel / select生产者消费者、跨执行单元交接工作、同时等待多个消息来源。以消息传递缩小共享状态范围;阅读 第 56 章。
Future / Promise组合异步完成事件,继续、汇聚、竞速或失败处理。使用 then / catch / any / all / race 描述结果依赖;阅读 第 57 章。
executor / task group复用线程池、批量提交和等待一组受控工作。将执行资源与任务范围分开;阅读 第 58 章。
deadline / cancel请求超时、连接关闭、服务停止或需要中止一条任务链。让停止信号沿取消令牌树传递,并在退出前完成必要清理;阅读 第 59 章。

建议学习顺序

先掌握线程与同步,再理解协程调度;随后用 Channel 和 Future 组织工作流,最后把 executor、task group 与取消组合进服务生命周期。

从线程开始进入协程教程查看并发 API

仓库可直接对照 examples/concurrency/thread、coroutine、channel_select、future_combine、task_group 与 cancel 示例。

内核模块地图

按体系分组的模块速查(公开头位于 include/xrt/;完整的逐 API 文档见 API 参考手册):

体系模块 / 头文件
地基core error error_format atomic memory memory_debug math hash random xid
数据与容器array map set avl list buffer queue(MPMC/MPSC/SPSC)slot_map value json xlon jsonl xlonl string charset number html regex pattern codec compress template
并发coroutine channel future future_bridge executor task cancel mutex/cond/sem/rwlock/once
系统服务file file_async path process signal logger io time environment console
网络net tcp udp proxy net_frame net_file net_interface
安全crypto asn1 pem x509 tls tls_client tls_server tls_session tls_stream
Web 协议http http1 http1_net http1_tls http_connection http_decode http_encoding http_te http_trailer http_upgrade websocket websocket_stream websocket_upgrade

扩展库指南

每个扩展库目录结构一致:src/ include/ tests/ examples/ bench/ config/modules.json single/ docs/。公开头沿用 xrt/ 命名空间,与内核头无缝拼接。

xhttp — HTTP 客户端与服务端

入口 <xhttp.h>;分层头 <xrt/http_client.h>、<xrt/http_server_runtime.h> 等 70 个。含 URL / Query / Form / MIME / Cookie / SSE / multipart / 静态文件。错误组件名 "xhttp"。

extlibs/xhttp/ · 272 模块

xws — WebSocket 运行时

入口 <xws.h>;运行时 API 在 <xrt/websocket_runtime.h>。客户端复用 xhttp 整个栈(代理 / Cookie / 超时全部生效),支持组播与零拷贝发送。

extlibs/xws/ · 74 模块

xruntime — 动态类型与对象系统

入口 <xruntime.h>;类型注册表、引用计数对象、对象图回收、动态调用、typed 容器投影(<xrt/typed_*.h>)。

extlibs/xruntime/ · 47 模块

xmail — 邮件协议套件

SMTP(STARTTLS / BDAT / XOAUTH2)、IMAP4(IDLE / COMPRESS=DEFLATE / BODYSTRUCTURE)、POP3、MIME 解析构建与 RFC 2047/2231 编解码。

extlibs/xmail/ · 51 模块

xssh — SSH2 协议栈

传输层、curve25519-sha256 KEX、ssh-ed25519 主机密钥、AES-GCM 加密、password/publickey/hostbased/keyboard-interactive 认证、通道与端口转发。

extlibs/xssh/ · 68 模块

测试与示例的组织

测试文件名后缀编码了测试维度,同一契约会以多个变体出现(如 test_http_client_iocp.c 只有一行 #define + #include "test_http_client.c"):

后缀含义
_oomOOM 故障注入:第 N 次分配精确失败 / 预算耗尽 / 全失败
_noalloc零堆分配契约:操作全程禁止分配
_iocp / _uring / _epoll / _kqueue / _select按事件后端独立实例化
_threads / _race多线程并发 / 精确控制的竞态窗口
_tlsTLS 链路变体
_mutation / _fuzz / _stress变异等价 / 确定性随机模糊 / 压力
tests/single/单头等价性探针(合并产物 = 模块化构建)

内核与五个扩展库提供 680 个示例 C 文件和 2,512 个测试 C 文件。通过模块清单找到对应源码与构建入口,沿调用流程深入实现。

建议学习路径

  1. 跑通构建:python tools/build.py --suite core,观察指纹增量与测试输出。
  2. 读示例:从 examples/ 挑选感兴趣模块的 main.c,理解初始化、调用和资源收尾。
  3. 读测试:结合 tests/<模块>/ 中的断言,理解接口行为与边界条件。
  4. 裁剪上手:用 XRT_MODULE_* 宏裁出你需要的最小集合,--trim-only 验证。

完成后往哪里走