fluxdown 中文文档 下载 App

一个引擎五种形态 — FluxDown 全家桶架构总览

引擎是唯一的真源

FluxDown 的全家桶做法在下载器里很少见——不是每个形态各写一套下载逻辑,而是只有一个 Rust 引擎(fluxdown_engine),其他所有形态都是这个引擎的「壳」:

                ┌── Desktop(GPUI 原生界面)
                ├── Headless Server(Docker / Web UI)
fluxdown_engine →├── NAS(DSM .spk / 一键包)
                ├── CLI(fluxdown add / list / pause)
                └── Android(原生 Flutter 界面)

每个壳的区别只是「怎么把引擎暴露给用户」——引擎本身的协议解析、分段、Work Stealing、BT/eD2K 客户端、SQLite 持久化、令牌桶限速,全都一模一样。

五种形态对比

形态界面运行方式和引擎的关系
桌面端GPUI 原生窗口用户启动,关窗口仍在跑引擎在进程内,三层架构
Headless ServerWeb UI(React)Docker / NAS 启动,7×24引擎在容器内 daemon
CLI命令行参数单次执行后退出或 --local 嵌入引擎可选连远程 Server 或本地嵌入
AndroidFlutter 原生界面手机常驻引擎在 Android native 层
NAS 套件Web UI(同 Headless)DSM 服务管理和 Docker Server 同一套组件

统一的 API 协议

所有形态对外暴露的 API 完全一样:

这意味着你写了一个脚本给桌面端发任务,直接把 127.0.0.1:17800 换成 NAS 上的 <nas-ip>:17800 就能对 NAS 上的 FluxDown Server 发同样的任务。

跨形态协作场景

几个典型用法:

代码结构

GitHub 仓库 zerx-lab/FluxDown 用 Cargo workspace 组织:

FluxDown/
├── engine/           # fluxdown_engine,所有形态共用
├── daemon/           # fluxdownd,engine 壳
├── agent/            # fluxdown-agent,daemon + API 网关
├── desktop/          # GPUI 桌面端(agent 壳)
├── server/           # Docker headless(agent 壳 + Web UI)
├── cli/              # fluxdown CLI
├── android/          # Flutter + native engine 桥
└── website-v2/       # 官方网站 + 文档

引擎永远是 engine/ 这一个 crate,每个形态都是它的应用层壳。