Mister Download Manager
  1. 主页
  2. 帮助
  3. 架构

架构

Mister Download Manager 各部分如何协同工作。

Crates

路径 Crate 作用
crates/engine mdm-engine 通过 HTTP(S) 或 FTP(S) 下载单个文件:探测、分段规划器、连接工作器、恢复状态、每主机限制、速度限制器、校验和、代理脚本
crates/app mdm-app 桌面应用(misterdownloadmanager.exe,egui):列表、类别、队列、调度器、对话框、托盘、设置
crates/cli mdm-cli 无界面下载,带进度(get,resume)
crates/mcp mdm-mcp MCP 服务器(misterdownloadmanager-mcp):AI 助手通过自动化 API 列出、添加和控制正在运行的应用的下载
crates/nmhost mdm-nmhost 浏览器的原生消息主机:从扩展程序获取捕获的下载并将其交给应用
crates/ipc mdm-ipc 应用和主机共享的单实例通道(受令牌保护的本地套接字)、数据文件夹和捕获规则
crates/tools mdm-tools 通过 yt-dlp 和 ffmpeg 处理视频页面(作为单独程序运行)
crates/crash mdm-crash 崩溃和冻结报告:监视进程、进程外 minidumps、符号化堆栈、报告文本和发布日志(crash-reports.md)
crates/torrent mdm-torrent 通过 librqbit 处理 BitTorrent 和磁力链接
crates/labserver mdm-labserver 一个带请求日志和故障注入的 HTTP Range 服务器,以及一个带自身故障的 FTP/FTPS 服务器,用于测试和基准测试
extension/ — Chromium (MV3) 和 Firefox 扩展程序
docs/ — 用户指南和教程(“帮助”打开它们)、此文件、基准数据
website/ — 未来网站的页面(尚未发布)

依赖关系指向内部:app、cli、mcp 和 nmhost 使用 engine 和 ipc;引擎对 UI 一无所知。应用仅通过其事件(进度、分段表快照、完成、失败)查看引擎。

引擎

Download
 ├─ probe()              size, resumable?, validators (ETag / Last-Modified), file name
 ├─ Planner (pure)       segment table: when a connection is free, the largest remaining
 │                       part is split in half (planner.rs, tested by random simulation)
 ├─ Worker × N           one HTTP/1.1 connection each, reused across segments; slow ones
 │                       are dropped and their part re-split
 │    └─ writes at its offset into <name>.mdm.part (created sparse)
 ├─ HostLimits           learns how many connections each server accepts
 ├─ Limiter (shared)     per-download and global token buckets
 ├─ State                segment table saved atomically (craft-atomic) for crash-safe resume
 └─ events → channel     Progress, Done, Failed

当所有分段完成后,部分文件会根据预期大小进行检查并重命名到位;文件的日期可以跟随服务器的日期。

FTP 和 FTPS(ftp.rs)通过相同的规划器、工作器和状态:一个分段是控制会话上的 REST + RETR,而不是范围 GET,SIZE 和 MDTM 代表头部,会话按下载进行池化并在分段之间重用。

应用

一个绘制到固定像素坐标的 egui 窗口,加上每个对话框一个即时视口。app.rs 保存状态(下载、队列、设置、列表选择)并将菜单、工具栏、按键和 IPC 命令转换为操作。每个对话框都是自己的模块,并返回一个 Outcome(打开、关闭、带值完成)。仅限 Windows 的调用限制在 win32.rs 中,其 Linux 和 macOS 对应项限制在 unix.rs 中(从会话、浏览器主机、声音、在文件夹中显示、崩溃处理程序开始);所有其他文件都是安全的、可移植的 Rust。字体来自系统:Windows 的 Fonts 文件夹、macOS 的系统字体、Linux 上的 fontconfig(theme.rs)。

下载列表和设置以原子方式保存到 %APPDATA%\misterdownloadmanager\(downloads.json)。浏览器主机读取相同的文件以获取捕获规则,因此“选项”中的更改适用于下一个捕获的下载。

浏览器集成

page ──► extension ──native messaging──► mdm-nmhost ──ipc──► app

扩展程序询问主机要捕获哪些文件类型,对照它们检查每个下载,并且只有在应用接受后才取消浏览器的下载;否则浏览器会保留它。

翻译

UI 显示的每个文本都通过 crate::i18n(craft-i18n 目录,i18n/<locale>.tsv)。tools/i18n/extract.py 从源代码重建 i18n/en.tsv,并在每个文本上为翻译人员提供注释(它是什么,在哪里显示,其占位符)。

测试和基准

cargo test针对注入故障(慢速、丢弃和拒绝连接、无范围服务器、文件更改)的 mdm-labserver 运行单元测试和端到端下载。tools/bench 运行已发布的速度比较;其原始数据在 docs/bench/ 中。

免费、开源、无广告、无试用。

下载 Mister Download Manager