仿 IDM 的多线程下载管理器,核心用 Go 编写。支持 Windows 原生桌面窗口、任务队列、限速、断点续传、动态切片。
| 能力 | 说明 |
|---|---|
| 桌面 GUI | 原生 Windows 窗口(非浏览器),任务列表 / 暂停继续 / 设置 |
| 任务队列 | 多任务排队,可设最大同时下载数,优先级上下移 |
| 限速 | 全局限速 + 单任务限速(512K / 2M),运行中可改 |
| 多连接加速 | 默认 8 路 HTTP Range 并发 |
| 动态切片 | 空闲线程从最忙分片尾部再切一半,提升尾部吞吐 |
| 断点续传 | .ddm.part + .ddm.meta,暂停或异常退出后可续传 |
| CLI | 单文件命令行下载 |
| Web UI(可选) | 本机浏览器管理界面,原生窗口不可用时的备用方案 |
注意: Windows 原生 GUI 必须带 Common Controls 6.0 的 manifest,否则启动可能报
TTM_ADDTOOL failed。仓库提供cmd/ddm/app.manifest,构建前需生成资源文件。
git clone https://github.com/wangyaominde/DDM.git
cd DDMgo install github.com/akavel/rsrc@latest
rsrc -manifest cmd/ddm/app.manifest -ico assets/ddm.ico -o cmd/ddm/rsrc_windows_amd64.syso也可在 cmd/ddm 目录下执行 go generate(需本机已安装 rsrc)。
go build -o ddm.exe ./cmd/ddm# 打开原生桌面窗口(推荐)
ddm.exe
# 或
ddm.exe gui| 参数 | 默认 | 含义 |
|---|---|---|
-data |
data |
队列持久化目录(queue.json) |
-dir |
downloads |
默认下载目录 |
-c |
3 |
最大同时下载数 |
-L |
0 |
全局限速(如 10M,0 = 不限) |
界面支持:新建下载、暂停/继续、取消/删除、任务限速、排队上下移、全局设置。
ddm.exe web
# 默认 http://127.0.0.1:7920/ ,会尝试自动打开浏览器
# ddm.exe web -addr 127.0.0.1:8080 -no-openddm.exe https://example.com/file.zip
ddm.exe -n 16 -l 5M -o big.iso https://example.com/big.iso
ddm.exe -q -o out.bin https://example.com/out.bin| 参数 | 默认 | 含义 |
|---|---|---|
-n |
8 |
连接数 |
-o |
自动推断 | 输出路径 |
-l |
0 |
限速(512K / 2M / 0) |
-q |
false |
静默模式 |
-min-split |
512KB |
动态切片阈值 |
| 文件 | 作用 |
|---|---|
目标.ddm.part |
未完成数据 |
目标.ddm.meta |
分片进度元数据 |
data/queue.json |
GUI 任务队列 |
Ctrl+C 或在 GUI 中暂停后,进度会保留;继续同一任务即可续传。进程异常退出后,原「运行中」任务会恢复为「暂停」,可在窗口中点继续。
初始: [==A==][==B==][==C==][==D==]
A 下完且 B 仍很长 → A 接手 B 未完成尾部的一半
空闲连接会拆分仍在下载的长分片,减少“最后一公里”拖慢整体速度。
源码树不含预编译二进制。若需生成安装程序:
# 构建 dist\ddm.exe 与 dist\DDM-Setup.exe
.\build-installer.ps1脚本会:生成图标/清单资源 → 编译主程序 → 编译安装器(嵌入 payload)。
DDM/
├── cmd/
│ ├── ddm/
│ │ ├── main.go # CLI + 桌面 + Web 入口
│ │ └── app.manifest # Common Controls 6.0
│ └── setup/
│ └── main.go # 可选安装器(运行时嵌入 payload)
├── internal/
│ ├── ui/ # Windows 原生窗口 (walk)
│ ├── server/ # Web UI HTTP API
│ ├── downloader/ # 引擎、Range、限速、进度
│ ├── queue/ # 任务队列与调度
│ └── meta/ # 断点元数据
├── web/ # 浏览器界面静态资源
├── assets/ # 图标等资源
├── build-installer.ps1 # 安装包构建脚本
├── go.mod
└── README.md
- 仅支持 HTTP/HTTPS。多线程需要服务端支持
Range。 - 全局限速与任务限速同时生效。
- 不跟踪、不上报;队列与下载文件均保存在本地目录。
MIT