16 个版本 (4 个重大更改)
0.8.2 | 2023年5月8日 |
---|---|
0.8.1 | 2023年5月8日 |
0.7.1 | 2023年5月8日 |
0.6.4 | 2023年2月25日 |
0.4.2 | 2022年11月29日 |
#444 in HTTP服务器
每月下载量81次
345KB
2.5K SLoC
pipe_downloader
此程序用于一次性下载、解压和解包文件。因此,它基本上与以下命令执行相同的操作
curl http://arvhive.tar.lz4 | lz4 -dc | tar -xv -C output_dir
结果是使用 (pipe_downloader 将创建目录,如果目录不为空)
pipe_downloader --url http://arvhive.tar.lz4 --output-dir output_dir
但它比上述管道命令使用多核更好。此外,它提供进度信息,可以被服务器用于提供API。实现是非阻塞的,基于线程(未使用异步I/O)
它为每个下载启动3个或更多线程,一个或多个用于下载,一个用于解压,一个用于解包(写入文件)。它使用数据块,当数据块被填充数据时,它们被收集,当下一个数据块满了时,它们由解包器处理。
未使用不安全代码。
目前,它支持
- archive.tar.lz4
- archive.tar.gz
- archive.tar.bz2
- archive.tar.zst
- archive.tar.xz
- single_file.lz4
- single_file.gz
- single_file.bz2
- single_file.zst
- single_file.xz
作为操作的基本模式,它使用 PARTIAL_CONTENT (206) HTTP状态代码,允许在连接丢失时继续操作(下载器耐心等待数据块再次可用)。当服务器不支持 PARTIAL_CONTENT 时,下载器也支持正常的 GET (200) 下载,但任何网络超时/断开连接将导致不可恢复的错误。
没有选项在不可恢复错误或杀死进程后重新开始下载。
- 交叉编译
交叉构建--发布--目标 aarch64-未知-linux-musl
- 测试运行
cargo运行 --发布 --示例pipe_downloader ----output-dir linux-6.0.4 --url=https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-6.0.4.tar.gz
依赖项
~29–45MB
~793K SLoC