gpt4 book ai didi

http - 实现一个支持恢复的下载管理器

转载 作者:可可西里 更新时间:2023-11-01 15:09:59 25 4
gpt4 key购买 nike

我打算用 C++ 编写一个支持恢复(以及每次下载多个连接)的小型下载管理器。

根据我目前收集到的信息,在发送 http 请求时,我需要添加一个 header 字段,其键为“Range”,值为“bytes=startoff-endoff”。然后服务器返回一个 http 响应,其中包含这些偏移量之间的数据。

所以我的大致想法是将文件拆分为每个文件允许的连接数,并为每个拆分部分发送一个具有适当“范围”的 http 请求。因此,如果我有一个 4mb 的文件和 4 个允许的连接,我会将文件拆分为 4 个并发出 4 个 http 请求,每个请求都有适当的“范围”字段。实现恢复功能需要记住哪些偏移量已经下载,并且根本不请求这些偏移量。

  • 这样做正确吗?
  • 如果网络服务器不支持恢复怎么办? (我猜它会忽略“Range”而只发送整个文件)
  • 在发送http请求时,是否应该在范围内指定整个分割大小?或者可能要求更小的部分,比如每个请求 1024k?
  • 读取数据时,我应该立即将其写入文件还是做某种缓冲?我想写小块可能很浪费。
  • 我应该使用内存映射文件吗?如果我没记错的话,建议经常读取而不是写入(我可能错了)。它是内存明智的吗?如果我同时有多个下载怎么办?
  • 如果我不使用内存映射文件,我应该根据允许的连接打开文件吗?或者在需要写入文件时简单地查找? (如果我确实使用内存映射文件,这将非常容易,因为我可以简单地拥有多个指针)。

注意:我可能会使用 Qt,但这是一个一般性问题,所以我将代码排除在外。

最佳答案

关于请求/响应:

对于 Range-d 请求,您可以获得三种不同的响应:

206 Partial Content - 恢复支持且可能;检查 Content-Range header 的大小/响应范围
200 OK - 不支持字节范围(“恢复”),整个资源("file")跟随
416 Requested Range Not Satisfiable - 不正确的范围(过去的 EOF 等)

内容范围usu。看起来像这样:Content-Range: bytes 21010-47000/47022,即字节开始-结束/总计。

检查 HTTP spec有关详细信息,尤其是第 14.5、14.16 和 14.35 节

关于http - 实现一个支持恢复的下载管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/717319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com