#parallel #download #get

已删除 parallel-getter

使用并行 GET 请求获取文件

使用旧 Rust 2015

0.2.0 2018年10月12日
0.1.0 2018年10月10日

#11 in #get

25 次每月下载
用于 rustget

MIT 许可证

22KB
400 代码行

parallel-getter

从网络服务器通过 GET 请求获取文件时,可以定义每次请求接收的字节范围。这允许在相同的 URL 上使用多个 GET 请求来增加该文件的传输吞吐量。一旦获取了部分,它们将被连接成一个单独的文件。

因此,这个crate将使得设置并行 GET 请求变得非常简单,它提供了一个可配置的线程数和一个可选的回调,以监控传输进度。

特性

  • 使用并行 GET 请求下载文件以最大化带宽使用。
  • 指定镜像以将请求分散到不同的服务器。
  • 控制用于获取请求的线程数。
  • 定义存储部分到内存中的最小阈值。
  • 定义线程应使用时的最小阈值。
  • 指定放弃前的尝试次数。
  • 一个可选的回调,用于监控下载进度。
  • 如果服务器不支持范围,则回退到单个线程。
  • 如果服务器不返回内容长度,则回退到单个线程。
  • 在失败后重试时交替使用镜像。

示例

extern crate reqwest;
extern crate parallel_getter;

use reqwest::Client;
use parallel_getter::ParallelGetter;
use std::fs::File;
use std::path::PathBuf;
use std::sync::Arc;

let client = Arc::new(Client::new());
let mut file = File::create("new_file").unwrap();
ParallelGetter::new("url_here", &mut file)
    // Additional mirrors that can be used.
    .mirrors(&["mirror_a", "mirror_b"])
    // Optional client to use for the request.
    .client(client)
    // Optional path to store the parts.
    .cache_path(PathBuf::from("/a/path/here"))
    // Number of theads to use.
    .threads(5)
    // threshold (length in bytes) to determine when multiple threads are required.
    .threshold_parallel(1 * 1024 * 1024)
    // threshold for defining when to store parts in memory or on disk.
    .threshold_memory(10 * 1024 * 1024)
    // Callback for monitoring progress.
    .callback(16, Box::new(|progress, total| {
        println!(
            "{} of {} KiB downloaded",
            progress / 1024,
            total / 1024
        );
    }))
    // Commit the parallel GET requests.
    .get();

依赖关系

~19–30MB
~538K SLoC