fluxdown 中文文档 下载 App

六协议统一队列 — 不区分协议、共享限速、统一调度

传统方案的麻烦

一个重度下载用户如果想覆盖所有协议,传统做法是:

IDM(HTTP/FTP)+ qBittorrent(BT)+ aMule(eD2K)+ 浏览器扩展抓 HLS/DASH

麻烦点:每个客户端各自一套队列、各自一个限速器、各自一套设置、各自的数据目录。你想把 BT 和 HTTP 的任务排到同一个「白天低调晚上全速」的队列里?做不到。你想让所有任务共享一个 30 MB/s 的全局限速桶?做不到。你想把所有任务状态导出到一张表?做不到。

FluxDown 的做法

六个协议各有自己的下载引擎(HTTP 做 Range、BT 依赖 librqbit、eD2K 做 Server + Kad、HLS/DASH 做清单解析),但它们全部接入同一个 Rust 调度器、同一个令牌桶限速器、同一个 SQLite 持久化层、同一个队列系统。

          ┌──── HTTP/HTTPS ────┐
          ├──── FTP ───────────┤
          ├──── BitTorrent ────┤
调度器 ←──┼──── HLS / DASH ────┼──→ 统一队列 / 限速 / 持久化
          ├──── eD2K ──────────┤
          └───────────────────┘

能做到什么

统一排队

HTTP 任务和 BT 任务并排放在 Main Queue 里,谁先启动、谁等下一个位置完全按队列顺序,不区分协议。

统一限速

令牌桶(见 令牌桶限速)对所有协议生效。全局设 10 MB/s,HTTP 和 BT 一起从这 10 MB/s 里抢。

统一每日调度

「设置 → 队列 → 每日计划」对所有协议生效。比如你设 Main Queue 每天 22:00 自动全速、8:00 自动暂停,HTTP 和 BT 任务一起遵守。

统一持久化

重启后所有任务(不管什么协议)都从 SQLite 里读出分段/part 状态,断点续传。

统一 Boost / 优先级

任意协议的任务都可以点「Boost」——让调度器暂时把更多并发分给它,快速跑完。

队列本身是什么

队列是命名容器(比如 Main Queue、Download Later、夜间全速队列),每个队列有:

一个任务只属于一个队列。队列之间是并列关系——它们从同一个全局令牌桶里拿带宽,但各自控制内部任务的并发数。

混合场景的例子

典型的「统一队列」场景:

白天 8:00–22:00,Main Queue 限速 5 MB/s、并发 4 个。晚上 22:00–次日 8:00,队列自动解锁、限速解除、并发 16。

队列里混着:HTTP 大文件 × 2、BT 热门资源 × 1、eD2K 稀有资源 × 1、HLS 视频 × 1。它们共同遵守同一份每日计划、同一个限速桶。

传统方案下这不可能——你得在四个客户端里分别设置时间和限速,而且还得手动协调让它们不互相抢。