
有没有能替代迅雷和 IDM 的下载工具?聊聊我用了两个月的 FluxDown
先交代背景:我日常需要下载大量开发相关的文件,ISO 镜像、SDK 包、偶尔还有视频素材。之前一直在 IDM 和迅雷之间来回切换——IDM 下 HTTP 文件快但不支持磁力,迅雷支持但广告多、限速恶心。
后来在 GitHub 上偶然看到 FluxDown,试用之后就没换回去。
说说它的技术方案和实际体验
下载引擎
核心是一个 Rust 写的后端,跑在 Tokio 异步运行时上。每个下载任务是一个独立的 tokio task,通过 CancellationToken 控制生命周期,任务之间互不干扰。前端用 Flutter,两者之间通过 Rinf 框架做 FFI 通信,用 bincode 序列化,延迟很低。
这个架构的好处是下载引擎的性能不受 GUI 框架拖累。Rust 端处理所有网络 I/O 和磁盘写入,Dart 端只管渲染和用户交互。
智能分段
这是它和 IDM 最大的区别。IDM 默认分 8 段,不管文件多大、网速多快都一样。FluxDown 的做法是先用一个 512KB 的探针请求测量实际带宽,然后结合文件大小和 CPU 核心数算出最优分段数。
具体逻辑:4MB 以下的小文件不分段,单连接搞定;大文件每段不少于 2MB;最多不超过 CPU 核心数的 4 倍(I/O 并行嘛),绝对上限 64 段。带宽低于 512KB/s 的时候只用推荐值的 25%,避免过多连接反而拖慢速度。这个策略比固定分段合理得多。
另外它有运行时动态拆分——如果某个分段下载完了,空闲线程会自动去帮还在跑的慢段。
多协议
HTTP/HTTPS 用 reqwest + rustls,支持 Range 请求和断点续传。FTP 用 suppaftp 同步 API 包在 spawn_blocking 里跑,多连接并行。BitTorrent 用 librqbit 做引擎,有独立的多线程运行时,支持 DHT、tracker、UPnP。
除了这三个常规协议,它还支持 HLS 和 DASH 流媒体下载。浏览器扩展会 monkey-patch 页面的 fetch 和 XMLHttpRequest,检测到 m3u8 或 mpd 链接后自动识别,支持 AES-128-CBC 解密。这个功能对下载在线视频很实用。
浏览器扩展
Chrome MV3 的 WXT 扩展,设计了三层拦截:webRequest 层缓存元数据、downloads.onDeterminingFilename 做主要拦截、downloads.onCreated 兜底。比一般的下载扩展可靠。扩展通过 HTTP 请求发到本地 19527 端口和客户端通信,不走 Native Messaging,部署简单。
如果你需要一个一站式的下载工具,不想在 IDM、迅雷、qBittorrent 之间来回切,FluxDown 值得一试。完全免费,没有广告和会员。技术栈选型比较现代(Flutter + Rust),代码质量从 Clippy deny 配置就能看出来要求挺严格的。
全局限速用令牌桶算法,50ms 刷新间隔,限速曲线比较平滑。所有任务状态持久化到 SQLite,断点续传不丢数据。界面用 shadcn_ui 组件库,暗色浅色主题都有,12 套配色。系统托盘、文件关联(.torrent 双击打开)、单实例控制这些桌面软件该有的功能都做了。
不足
目前只有 Windows 版本。没有下载完成后自动执行脚本的功能。BT 下载的速度取决于资源热度,这个没办法。代理支持有,但 SOCKS5 偶尔不太稳定。
总结
如果你需要一个一站式的下载工具,不想在 IDM、迅雷、qBittorrent 之间来回切,FluxDown 值得一试。完全免费,没有广告和会员。技术栈选型比较现代(Flutter + Rust),代码质量从 Clippy deny 配置就能看出来要求挺严格的。
官网 fluxdown.zerx.dev,有兴趣的可以看看。