0%

不分块的断点续传

为什么

在和一个同时在讨论断点续传的原理和实现方案时,我发现了一个很奇怪的问题,搜索引擎似乎所有能够查询到的断点续传方案都是分块传输,那么有没有不分块的方案呢?如果有,那么为什么大家都不约而同地不使用呢?

简述

断点续传:指的是在上传/下载时,服务端/客户端记录上传/下载的进度,如果碰到网络故障,可以从已经上传/下载地方继续进行,没必要从头开始上传/下载,从而实现节约时间,提升速度。

方案

经过一番的资料查阅(看了一大堆 google 的文章),我才发现,原来,断点续传和分块的没有必然联系的。

先说结论:不分块的断点续传是存在的,但是,分块能够并行上传/下载数据,这样能够速度会更快

下载

对于下载而言,断点续传非常简单,因为客户端是主动方,我们可以明确地告诉服务器,我要什么?从哪里开始?这也就是所谓的断点续传。同时,我们也可以通过分块来并行下载,这样能够大大提升我们的下载速度。市面上大部分能够提升下载速度的下载器都是这个原理。

上传

第一次查资料时,我正是因为迷惑于为什么搜索引擎查询到的所有的断点续传的上传方案都是分块所以才继续往下钻研。

上传文件时的断点续传是可以不分块的,这种方案有两个要求:

  • 查询进度的接口
  • 上传文件的接口要能够自主判断文件上传的进度,在网络中断时,需要能够主动判断当前的传输进度并保存相关信息。

分块的断点续传也有一些相似的要求:

  • 查询进度的接口(这个可以和上传文件的接口合并,上传第一个分块时返回进度)
  • 上传文件的接口

优缺点

分块

  • 速度更快

不分块

  • 断点准确度更高