Skip to content

官方插件与仓库组织

查看 Markdown

核心与插件的公开接口统一放在 include/ark/,核心构建定义放在 src/core/,官方插件实现放在 src/plugins/<名称>/。核心与官方插件纳入 ark,业务插件放在应用仓库,arknet 保持独立。业务热更新的设计与实现暂缓,目录与 snake_case 整理已经落地,独立插件的功能整合仍按插件分别验收。

现有实现

独立仓库 ark 内的相关实现 建议合入位置 需要整理的内容
MySQLPlugin src/plugins/mysql src/plugins/mysql 由 arknet 自主实现 MySQL 客户端;插件整合配置、连接服务和业务回调
RedisPlugin src/plugins/redis src/plugins/redis 由 arknet 自主实现 Redis 客户端,再替换 aredis、bredis 的调用
URLPlugin Net HTTP client 与 HTTP server 插件 src/plugins/http 对照 libcurl 版本的请求、编码与 actor 调用能力,统一 HTTP 服务接口
LuaScriptPlugin 需要按新插件接口接入 src/plugins/lua 整理 Lua 绑定与脚本生命周期,移除对旧 NFComm 接口的依赖
ActorPlugin 需要按新插件接口接入 src/plugins/actor 明确任务调度、消息投递和业务线程的关系

这些仓库仍保留不同代际的接口和构建方式。合入时逐项对照功能、重叠实现与依赖。MySQL、Redis 客户端归入 arknet,其他插件的依赖按各自需求讨论。

目录布局

ark/
├── include/ark/         # 核心与插件公开接口
├── src/
│   ├── core/            # header-only 核心 target 定义
│   ├── plugins/         # 官方插件实现与 CMake 文件
│   │   ├── kernel/
│   │   ├── net/
│   │   ├── bus/
│   │   ├── http/
│   │   ├── mysql/
│   │   └── redis/
│   ├── app/
│   ├── proto/
│   └── server/
├── examples/            # 示例应用与业务插件
├── tests/               # 核心与跨插件集成测试
├── benchmarks/          # 可独立编译运行的基准程序
├── tools/               # 开发与配置工具
├── cmake/
└── docs/                # 中英文文档与 Nimbus 站点

上图列出主要目录。Consul、etcd、Kafka 等现有官方插件也按同一规则组织。Lua、Actor 的接入仍在规划中,上表列出的是它们的建议实现位置。

每个插件采用相同的目录布局,以 MySQL 为例:

include/ark/mysql/      # 使用该插件时需要的公开接口
src/plugins/mysql/
├── CMakeLists.txt
├── detail/             # 私有原生数据库桥接
└── *.cpp               # 插件入口与框架接入
tests/database/         # 数据库集成与协程测试

插件使用说明放在 docs/,示例应用放在 examples/。公共接口按能力定义,数据库客户端类型尽量保留在实现内。

核心与插件的边界

部分 职责 构建与发布
核心运行时 插件与模块注册、依赖顺序及生命周期 与官方插件统一验证接口兼容性
官方插件 网络、存储、脚本、服务发现等可选服务 独立 CMake target,按需启用和打包
业务插件 产品规则与业务消息处理 由应用仓库独立构建和发布
arknet IO 执行、网络端点、传输协议及数据库客户端 独立版本,由 ark 固定依赖版本

启用某个插件时才解析其专属依赖;框架公共头文件避免包含 MySQL、Redis、Lua 等客户端头文件。编译依赖和运行时服务依赖需要明确区分,例如启用 Redis 插件的测试还需要可用的 Redis 服务。

数据库客户端的职责

MySQL 和 Redis 客户端在 arknet 中自主实现,不采用 Boost.MySQL 或 Boost.Redis。arknet 负责数据库协议编解码、认证和异步通信;ark 的插件负责框架配置、模块服务和业务回调接入。

arknet 的单节点客户端范围为:MySQL 提供查询、参数化预处理和事务;Redis 提供通用命令、RESP2/RESP3 和流水线请求。两者包含认证、TLS、连接池、超时、取消和队列上限。Redis Cluster、Sentinel 和 Pub/Sub 后续再加。原生客户端已随 arknet 0.2.0 发布,包含独立服务端互通验证和本机性能报告;这不代表 ark 的 MySQL、Redis 插件已经切换到新客户端。插件接入及其业务回归仍待完成。

接下来讨论

  1. 保持已统一的 snake_case SDK 和目录结构;公开头文件与 CMake target 见项目结构。
  2. MySQL、Redis 插件采用 Asio 协程和 arknet 原生拥有型结果。arknet 提供调用方驱动的执行器,ark 在模块线程中派发;完成配置、事务、取消和关闭流程验证后,再启用运行时插件。
  3. 分别确认 Lua、Actor 等官方插件的接口和依赖,按插件补齐编译、功能和异常路径验证。

热更新相关的状态持有、调用完成判断和兼容边界,待当前改造完成后继续讨论。

导航

输入关键词开始搜索…

↑↓ 移动↵ 选择Esc 关闭