arknet 作为独立的 header-only 项目开发。通过范围明确的修改和可复现的检查,让 协议行为、IO 所有权和公共接口约定便于审查。
目录职责
| 目录 | 职责 |
|---|---|
include/arknet/base/ |
IO 调度、生命周期、事件队列和可复用组件 |
include/arknet/tcp/ |
TCP 和 TLS 流端点 |
include/arknet/udp/ |
UDP 客户端、服务端、Session 和 cast |
include/arknet/http/ |
HTTP/HTTPS、路由和 WebSocket 实现 |
include/arknet/websocket/ |
公共 WebSocket 头文件 |
include/arknet/external/ |
Asio 和 Beast 依赖接入 |
tests/ |
doctest、集成检查、压力测试和测试证书 |
benchmarks/ |
正式的回调及协程基准程序、矩阵执行器和报告工具 |
examples/ |
演示公共 API 的小型应用 |
docs/ |
中英文 Markdown、Nimbus 站点和性能报告 |
cmake/ |
依赖查找和安装包配置 |
代码风格
.clang-format 定义 C++ 格式:4 空格缩进、Allman 括号、120 列上限。
include 按系统库、第三方库、项目自身分组,组间空一行;组内按名称排序。
项目公共头文件先于本地头文件,windows.h 先于依赖它的系统头文件。
条件编译和配置宏的先后关系保持不变。.editorconfig 定义 UTF-8 编码、LF 换行和缩进约定。
使用 clang-format 18,与 CI 保持一致。
# 检查格式;--fix 应用格式。
CLANG_FORMAT=clang-format-18 bash scripts/format.sh --check
CLANG_FORMAT=clang-format-18 bash scripts/format.sh --fixmacOS 使用 brew install llvm@18 安装,并设置
CLANG_FORMAT="$(brew --prefix llvm@18)/bin/clang-format"。Ubuntu 24.04 安装
clang-format-18。Windows 安装 LLVM 18,在 Git Bash 中运行脚本。
如果 clang-format 命令已经指向版本 18,可以省略 CLANG_FORMAT。
脚本检查项目头文件、测试、示例和基准测试的 C++ 源码,排除内置 Boost 头文件、 doctest 和历史测量快照。CI 执行相同检查。格式工具仅用于开发。
构建和测试
依赖配置见安装和配置。在仓库根目录构建开发配置,并运行检查目标:
cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -DARKNET_ENABLE_SSL=ON \
-DARKNET_USE_BOOST_ASIO=OFF -DARKNET_ASIO_INCLUDE_DIR=/path/to/asio/include
cmake --build build --parallel 3
cmake --build build --target arknet_check功能测试使用内置 doctest,仅作为开发依赖。arknet_check 直接运行功能程序、
压力检查和安装包使用检查;启用 benchmark 后还会运行基准 smoke 检查。每个程序
的日志位于 build/tests/logs/。该目标不使用 CTest。
开发时可以单独运行所需测试程序:
build/tests/arknet_tcp_test --list-test-cases
build/tests/arknet_tcp_test --test-case="*framing*"
build/tests/arknet_tls_test --reporters=junit --out=build/tls.xml使用 Visual Studio 等多配置生成器时,在 CMake 构建命令中添加 --config Debug,
并使用对应配置的输出子目录和带 .exe 扩展名的程序。
新增测试应复现行为或失败,必要时检查完成次数和停止结果。异步断言使用明确的 同步机制和有时限的等待。修改共享组件或依赖接入层时,应覆盖受影响的两种依赖方案、TLS 开关及内置和外部 IO。生命周期和并发修改使用 sanitizer 检查;性能测试使用独立 的 Release 构建。当前检查配置和未覆盖范围见测试。
基准测试和报告
基准源码放在 benchmarks/,让库的使用者能够自行运行,并保持与 doctest 独立。
比较时使用相同硬件、依赖、编译配置和工作负载;基准测试期间不要同时构建或运行
其他测试。
标准流程、参数和测量定义见测量方法。IO 模型
说明共享 context 和分片 context 的比较,包括原生 Asio 协程工作负载。可选报告
生成器的依赖列在 benchmarks/requirements-report.txt。
报告保留原始 JSON、实际命令、宿主元数据、源码版本和程序哈希。区分短时 smoke 检查与性能证据。不能根据回环吞吐推断生产容量,也不能将回调的单消息 RTT 和 协程的批次 RTT 当作相同指标比较。
文档和提交历史
每个文档页面都有英文和中文版本,Nimbus 页面顶部通过下拉框选择语言。修改时同步更新两个版本,
确保示例、命令、默认值、限制和状态一致。详细内容放在 docs/,根 README 保持
简洁。新增页面需要导航入口,以及在静态站点和 GitHub 中都可用的相对链接。
文档按概览、开始使用、核心概念、功能、使用指南、示例、参考、性能和项目组织。 概念页解释行为与约束;指南围绕一个具体任务给出步骤和验证结果;参考页列出精确的 接口与默认值;性能页保留测量条件、图表和原始数据。每个协议模块分别提供概览、 服务端、客户端、配置和性能入口,共用机制通过链接引用,避免重复维护。
编辑 docs/ 下的 Markdown 源文件。docs/site/ 在构建时生成双语页面、代码高亮、
搜索索引、SVG 资源、逐页纯 Markdown、llms.txt 和 llms-full.txt。
生成内容不提交到 Git。只有构建或预览文档需要 Node.js 22.12+:
cd docs/site
npm ci
npm run dev -- --host 127.0.0.1 --port 8767
npm run check本地 URL 包含 /arknet/,与 GitHub Pages 的基础路径一致。npm run check 检查内容
转换、Astro 类型、构建结果、内部链接、锚点、SVG 路径和 AI 阅读入口。
语言下拉框保持当前页面;旧 Docsify hash 链接仍可跳转。
@cloudflare/nimbus-docs 固定版本,升级前审查 starter 的变更。
连续操作使用 Nimbus 的 <Steps> 和 <Step title="…">;说明、建议、注意和错误
使用 <Aside type="note|tip|caution|danger" title="…">。组件标签与 Markdown 正文之间
保留空行,标题使用对应页面的语言,提示框用于需要读者留意的信息。
构建时将这些页面编译为 MDX。AI 导出将步骤转为有序列表、提示框转为带标题的引用,
保留代码和链接。
公开报告保留最终测量结果、条件和适用范围。被替代的测量及调查日志保存在原始数据归档中。
提交信息使用英文。提交前,将开发过程中的临时 commit squash 为经过审查的连贯 修改。commit 或 pull request 说明最终行为和验证结果,不保留中间调试历史。
第三方声明
项目使用 BSL-1.0。独立编写的 arknet 核心代码使用 OpenArkStudio 声明。保留内置 第三方文件的适用声明,包括 fecpp 和 doctest。新增内置依赖时,同步更新中英文 第三方声明,并按许可证要求保留许可证文件。
修改名称、格式或语言标准不会消除复制实现的许可证义务。第三方修改应独立维护, 并说明修改目的。开发和文档依赖不应成为使用 arknet 的应用运行依赖。