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

本文是Unity开发系列的第二篇,详细介绍了如何实现多线程断点续传文件下载管理器,包括文件下载流程、网络选型、断点续传逻辑、异常处理、MD5校验以及代码整合。特别强调了使用C#原生的网络API进行同步接口操作,以及断点续传的关键在于判断临时文件并从中开始下载。
摘要由CSDN通过智能技术生成

接上一篇文章

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

断点续传下载文件

文件下载流程

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

开始
获取文件长度
下载文件
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); // 读取第一份数据

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

HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Timeout = TimeOutWait;
request.ReadWriteTimeout = ReadWriteTimeOut;

断点续传下载逻辑

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

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值