六协议统一队列 — 不区分协议、共享限速、统一调度
传统方案的麻烦
一个重度下载用户如果想覆盖所有协议,传统做法是:
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。它们共同遵守同一份每日计划、同一个限速桶。
传统方案下这不可能——你得在四个客户端里分别设置时间和限速,而且还得手动协调让它们不互相抢。