14 个版本 (4 个破坏性更新)
0.8.0 | 2023 年 5 月 8 日 |
---|---|
0.7.0 | 2023 年 5 月 8 日 |
0.6.5 | 2023 年 5 月 8 日 |
0.6.4 | 2023 年 2 月 25 日 |
0.4.2 | 2022 年 11 月 29 日 |
#1039 in HTTP 服务器
94 每月下载次数
用于 pipe_downloader
59KB
1.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。实现是非阻塞的,基于线程(不使用异步 IO)
它为每个下载启动 3 个或更多线程,一个或多个用于下载,一个用于解压缩,一个用于解包(写入文件)。它使用块,当块充满数据时,它们被收集,当下一个块满时,它们由解包器处理。
未使用任何不安全代码。
目前,它支持
- archive.tar.lz4
- archive.tar.gz
- archive.tar.bz2
- single_file.lz4
- single_file.gz
- single_file.bz2
作为操作的基本模式,它使用 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
依赖项
~13–27MB
~450K SLoC