客户端与服务器之间数据交换的效率取决于文件传输的性能。通过数据压缩断点续传可以实现文件传输和网络请求中的性能优化。这两种方式可以减少宽带占用,提高传输效率,从而达到提升数据交换性能。

上传下载接口

request模块主要给应用提供上传下载文件、后台传输代理的基础能力。

request模块的功能包括:

优化方案

  • 低网速上传琐碎文件场景用数据压缩
  • 大文件上传下载场景用断点续传

数据压缩

  • 有损压缩:仅限图片视频音频等文件适用。通过减少图片的分辨率, 降低音频的音质等手段。
  • 无损压缩
    • 对一些零碎文件可以使用 zlib(Zip模块)来进行打包压缩,减少上传请求次数;
    • 对一些大文件可以利用缓存技术,服务器将曾经上传过的大文件MD5码缓存起来,本地在上传前预生成MD5码并传输到服务器进行比对,如果相同则说明服务器存在该文件,可以跳过该文件上传,从 而省略重复传输时间。

断点续传

断点续传需要应用端和服务器端相互协作完成。

  • 应用端API:
    • fileIo(文件管理):用于处理文件上传操作,提供了读取文件内容,文件分片和组合的功能。
    • hash(文件哈希处理):用于实现文件MD5的计算,将计算的MD5值预先传到服务器端进行预处理,实现文件秒传,同时确保传输的准确性和可靠性。
    • request(上传下载):用于实现文件上传操作,并支持在上传过程中的断点续传功能。
  • 服务端技术:
    • 协议需要支持Range:用于在服务器端支持范围请求,方便处理文件上传下载断点续传功能。
    • 文件校验相关逻辑:需要实现校验文件是否有错,确保在传输中断后能够准确恢复并继续传输。

文件上传

对于大文件断点续传上传,本文采用request(上传下载)模块中的request.agent任务托管接口,可以自动实现暂停继续重试等操作,无需手动将文件分片和记录上传分片信息。

文件下载

对于大文件断点续传下载,也可以直接调用request.agent接口,该接口的断点续传是基于HTTP协议Header里的Range字段实现的,在任务暂停重启的时候,会自动设置Header中的Range字段,无需进行额外的配置。

Range简介

HTTP协议里面的Range字段,官方名称为范围请求,它允许服务器只发送 HTTP 消息的一部分到客户端,可以用来请求部分数据而不是整个资源。

Range的格式通常是Range: =-,其中表示范围所采用的单位,通常是字节(bytes), 和 表示请求的起始字节和结束字节的位置。

多文件下载监听

文件下载监听是指在单文件下载的功能基础上,同时进行多个文件下载进度和状态的监听管理。实际开发中,需要使用request上传下载模块实现,包括监听每个文件下载任务的进度,任务是否暂停,下载是否完成等状态情况。

12-12 13:48