| Crates.io | vielpork |
| lib.rs | vielpork |
| version | 0.1.2 |
| created_at | 2025-03-12 14:00:56.847617+00 |
| updated_at | 2025-03-13 13:09:08.968326+00 |
| description | A high-performance multi-threaded HTTP downloader with extensible reporting and resolution strategies. |
| homepage | |
| repository | https://github.com/islatri/vielpork |
| max_upload_size | |
| id | 1589782 |
| size | 160,481 |
Rust编写的高性能多线程HTTP下载器库,具有可自定义的报告器和资源解析策略。
Vielpork是一个高性能的多线程HTTP下载器,由Rust编写,具有可自定义的报告器和资源解析策略。它提供:
stateDiagram-v2
[*] --> GlobalInit
GlobalInit --> GlobalRunning: start_all()
GlobalRunning --> GlobalSuspended: pause_all()
GlobalSuspended --> GlobalRunning: resume_all()
GlobalRunning --> GlobalStopped: cancel_all()
GlobalStopped --> [*]
state TaskStates {
[*] --> TaskPending
TaskPending --> TaskDownloading: start_task()
TaskDownloading --> TaskPaused: pause_task()
TaskPaused --> TaskDownloading: resume_task()
TaskDownloading --> TaskCanceled: cancel_task()
TaskDownloading --> TaskCompleted: finish()
TaskPaused --> TaskCanceled: cancel_task()
TaskCanceled --> [*]
TaskCompleted --> [*]
}
GlobalSuspended --> TaskPaused : propagate
GlobalStopped --> TaskCanceled : propagate

添加到您的Cargo.toml:
[dependencies]
vielpork = "0.1.2"
use vielpork::downloader::Downloader;
use vielpork::reporters::tui::TuiReporter;
use vielpork::resolvers::url::UrlResolver;
use vielpork::base::structs::DownloadOptions;
use vielpork::base::enums::DownloadResource;
use vielpork::error::Result;
use std::sync::Arc;
use tokio::sync::Mutex;
#[tokio::main]
async fn main() -> Result<()> {
let options: DownloadOptions = DownloadOptions::default()
.with_save_path("fetch".to_string())
.with_concurrency(3);
let downloader = Downloader::new(options, Box::new(UrlResolver::new()), Box::new(TuiReporter::new()));
let resources = vec![
DownloadResource::Url("https://example.com".to_string()),
DownloadResource::Url("https://example.com".to_string()),
DownloadResource::Url("https://example.com".to_string()),
DownloadResource::Url("https://example.com".to_string()),
DownloadResource::Url("https://example.com".to_string()),
DownloadResource::Url("https://example.com".to_string()),
DownloadResource::Url("https://example.com".to_string()),
DownloadResource::Url("https://example.com".to_string()),
DownloadResource::Url("https://example.com".to_string()),
];
downloader.start(resources).await?;
loop {
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
// Because of the async nature of the downloader, we need to keep the main thread alive
}
Ok(())
}
indicatif库的终端进度条您可以在vielpork::base::traits中查看所有trait并实现自己的组件。
ProgressReporter:允许报告器处理进度更新的traitResultReporter:允许报告器处理操作或任务的结果的traitResourceResolver:允许解析器从特定来源下载资源的trait这个库是差不多一个上午写完的,所以肯定还有很多地方需要改进,目前也只是满足了我自己的项目需求,不能保证完全符合所有人的需求。
以及我是一名Rust初学者,代码其中可能有很多不规范的地方,因为学习和编程的时间有限,给大家带来的困扰,还请见谅( >﹏<。)。
所以,如果代码有任何问题,或者你有任何建议,欢迎提交PR或者Issue,我会尽快处理~
如果你想贡献代码,请遵循以下规则:
cargo fmt和cargo clippy本项目基于 MIT License 开源,请尊重原作者的著作权。
最开始找到了viel这个词,后面想了下rufen、ekstase、reichen
但是正在我还在犹豫不决的时候,好朋友来寝室送了我一纸杯的熏猪肉丝
所以我就直接取名叫做vielpork了,这个名字的意思是很多猪肉丝
但如果是功能描述的话,这个下载器主打的是多报道通道下载,所以也是很多报道
report的vielpork很接近,也还不错
对于连续吃了一个星期免费粥的我来说,这个名字已经很好了
哦对了,水煮肉片也可以算是VielPork了