Mister Download Manager의 구성 요소들이 어떻게 작동하는지 설명합니다.
크레이트
| 경로 | 크레이트 | 역할 |
|---|---|---|
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 |
충돌 및 멈춤 보고서: 모니터 프로세스, 프로세스 외부 미니덤프, 심볼화된 스택, 보고서 텍스트 및 릴리스 로그(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)는 동일한 플래너, 작업자 및 상태를 거칩니다. 세그먼트는 범위가 지정된 GET 대신 제어 세션의 REST + RETR이며, SIZE 및 MDTM은 헤더를 대신하고, 세션은 다운로드별로 풀링되어 세그먼트 간에 재사용됩니다.
앱
고정된 픽셀 좌표에 그려진 하나의 egui 창과 대화 상자당 하나의 즉시 뷰포트가 있습니다. app.rs은 상태(다운로드, 대기열, 설정, 목록 선택)를 유지하고 메뉴, 도구 모음, 키 및 IPC 명령을 작업으로 전환합니다. 각 대화 상자는 자체 모듈이며 Outcome(열림, 닫힘, 값으로 완료)를 반환합니다. Windows 전용 호출은 win32.rs에, Linux 및 macOS 해당 호출은 unix.rs에 국한됩니다(세션, 브라우저 호스트, 소리, 폴더에 표시, 충돌 처리기부터 시작). 다른 모든 파일은 안전하고 이식 가능한 Rust입니다. 글꼴은 시스템에서 가져옵니다: Windows의 글꼴 폴더, 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 다운로드