fluxdown 中文文档 下载 App

FluxDown 三层进程架构:桌面界面之外常驻的 Agent 与 Daemon

为什么关窗口还能继续下载

传统下载器关闭界面即停止任务,因为下载逻辑和界面在同一个进程里。FluxDown 在启动时会起三个进程,每个进程职责单一:

fluxdown-desktop    (L3,按需启动,关窗口即退出)
  ↕ 本地 RPC
fluxdown-agent      (L2,常驻托盘)
  ↕ 本地 RPC
fluxdownd           (L1,守护进程)
  ↕ 进程内调用
fluxdown_engine     (L0,Rust 引擎核心)

三层之间通过本地 RPC(Windows Named Pipe / Unix Socket)通信,进程崩溃不会连锁死亡。

各层职责

L0 — fluxdown_engine(引擎核心)

Rust Tokio 异步实现,负责六种协议、分段调度、Work Stealing、哈希校验、SQLite 读写。被 Daemon 在进程内调用,不单独启动。

L1 — fluxdownd(守护进程)

真正下载的主人。它持有任务、队列、调度计划、RSS 订阅、插件、Webhook 这些长期状态。无论桌面界面开不开着,它都一直在跑。关闭桌面时下载不停。

L2 — fluxdown-agent(网关)

常驻托盘,承接所有外部入口:浏览器扩展 Native Messaging、剪贴板监听、云同步、本地 API(默认监听 127.0.0.1:17800)、fluxdown:// 协议。它把这些请求转换成 Daemon 的命令再转发下去。

L3 — fluxdown-desktop(桌面界面)

GPUI 渲染的 GPU 原生窗口。按需启动、打开即显、关闭即退。它并不执行下载,只是向 Agent/Daemon 发命令、拉状态来渲染。

为什么这样分

这种分层带来三个好处:

  1. 界面可弃 — 关掉不丢下载,再打开直接拉取 Daemon 当前状态继续显示。
  2. 多客户端安全 — 同一个 Daemon 可以被桌面界面、CLI、Docker Web UI、Android 应用同时访问,全部走本地 API,互不干扰。
  3. 崩溃隔离 — 某层崩了不会拖垮其他层。比如浏览器扩展 Native Messaging 出问题最多让 Agent 重启,引擎任务本身还在 Daemon 里跑。

关闭到托盘

桌面端默认行为是点 X 关闭到系统托盘而不是退出。托盘图标点击打开界面,右键菜单有「暂停全部 / 继续全部 / 退出」。从托盘退出才会真的终止 Daemon。

启动顺序

桌面端启动时会检查 Daemon 是否已在运行:

这意味着如果 Agent 和 Daemon 已经在跑,CLI 或 Docker Server 完全可以单独工作,桌面界面不是必须的。