#tar #download #lz4 #downloader #gz #thread #pipe-downloader

pipe_downloader_lib

核心库 - 为 *.tar.gz, *tar.lz4 和 *.tar.bz2 文件提供快速下载和解压缩库

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 服务器

Download history 10/week @ 2024-03-12 1/week @ 2024-03-26 11/week @ 2024-04-02

94 每月下载次数
用于 pipe_downloader

MIT 许可证

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)下载,但任何网络超时/断开连接都将导致不可恢复的错误。

没有选项在不可恢复错误或终止进程后重新启动下载。

  1. 交叉编译

交叉构建--发布--目标 aarch64-未知-linux-musl

  1. 测试运行

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