Mister Download Manager
  1. 홈
  2. 도움말
  3. 아키텍처

아키텍처

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 다운로드