当前位置:   article > 正文

Unity开发(二) 多线程断点续传文件下载管理器(下)

Unity开发(二) 多线程断点续传文件下载管理器(下)

接上一篇文章

上一篇文章重点阐述了文件下载管理器的多线程管理部分的内容,这篇文章解决单个文件下载断点续传的实现。

断点续传下载文件

文件下载流程

针对文件下载,要保证准确性和高效,设计了如下的流程

开始
获取文件长度
下载文件
MD5校验
下载完成
解压文件

本文并不涉及解压文件,只是抛砖引玉,有需求读者自行修改

网络选型

TIP:为什么选HttpWebRequest

Unity提供了WWWUnityWebRequest的网络解决方案,但两者都是基于协程(或者说unity主进程),并不适用于线程下运行。所以我们能用的只有C#原生的HttpWebRequest,网上对HttpWebRequest的解析很多了,就不大篇幅阐述了。

由于整个下载流程都在线程中,那么直接使用的就是HttpWebRequest的同步接口(阻塞),等待结果返回。

HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
HttpWebResponse respone = (HttpWebResponse)request.GetResponse();
Stream ns = respone.GetResponseStream();
int readSize = ns.Read(bytes, 0, oneReadLen); // 读取第一份数据
  • 1
  • 2
  • 3
  • 4

使用同步接口(阻塞),一定要设置超时机制,否则默认的超时机制要么超长要么不起效。

HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Timeout = TimeOutWait;
request.ReadWriteTimeout = ReadWriteTimeOut;
  • 1
  • 2
  • 3

断点续传下载逻辑

断点续传有多种方式实现,比如迅雷的下载,是将大文件切成4MB的块,然后不同线程(p2p)下载对应块,然后所有块下载完成,校验一下,整个大文件就下载完成了。
而这里涉及的场景,是对单一路径(CDN)的下载,并不需要那么复杂的逻辑,只需要的是一个可以继续下载的功能。
下载逻辑如下图:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/341619
推荐阅读
相关标签
  

闽ICP备14008679号