HarmonyOS鸿蒙Next中大文件高速并发传输解决方案(上)

HarmonyOS鸿蒙Next中大文件高速并发传输解决方案(上) 本文由上下两部分构成,若您想快速浏览下半部分的精彩内容,可通过大文件高速并发传输解决方案(下)直接访问。

  1. 概述

针对大文件的高性能传输是应用开发中非常常见的场景,特别是在处理大规模数据传输时,性能优化显得尤为关键。在大文件传输中,最为典型的操作包括文件的上传和下载。这两种操作通常通过HTTP协议实现,并通过开发者根据不同的需求采用特定的技术与策略来确保高效和可靠的数据传输。

然而,当前HarmonyOS接口对这两种操作提供的功能特性有限。对于下载文件场景而言,当前HarmonyOS仅能提供基础的下载功能,在服务端限流或网络条件不佳(如弱网环境)时,可能未能充分利用可用的网络带宽;而当遇到网络连接中断,应用崩溃等异常情况时,已下载的部分文件可能会残留在应用中,并需要手动清理从头开始下载。对于上传文件场景而言,当前HarmonyOS仅能提供基础的上传功能,在遇到网络连接中断,应用崩溃等异常情况时,同样需要从头开始上传文件。这些问题不仅影响用户体验,还可能导致不必要的带宽浪费和失败的重复尝试。

针对上述痛点,本文提供了一个支持大文件多线程并发分块下载、断点续下、分片上传、断点续传、自动重试等多个特性的三方库super_fast_file_trans(SFFT),并基于该三方库提供了一个实际的开发案例,旨在帮助开发人员更好地实现大文件数据传输场景。

  1. 功能特性

多线程并发分块下载

多线程并发分块下载是一种利用多线程能力加速下载过程的技术。通过将目标大文件规划为多个块,客户端可以发送多个连接请求来并行下载目标文件的不同数据部分,并同时写入到本地文件中。该技术的目的是充分利用设备的网络带宽,提升下载速率,在网络条件不理想的情况下显著减少下载时间。在网络传输中,超过100MB的文件就可以被视作大文件,这时就可以考虑使用分块下载来提高下载的传输效率(尤其在弱网条件下)。

文件的分块下载通常是基于HTTP协议中的Range请求头实现,Range字段是HTTP的一个请求头部,特别用于在请求中指定目标资源的某个字节范围。通过解析HTTP请求中设置的Range头,服务端可以仅返回文件被指定的字节部分,从而节省传输开销,以支持断点续传和分块下载。

SFFT基于HarmonyOS提供的taskpoolRemote Communication Kit(rcp)两种底座能力实现大文件多线程并行分块下载。对于一个下载任务,SFFT会根据设定参数和目标文件大小将目标文件分成若干个块,并创建多个线程分别请求这些数据块。对于每一个线程,线程内部都会根据被分配的块的范围创建指定Range头的HTTP连接,独立从服务端请求数据。在数据成功响应后,客户端中的多个线程会并行地将各个请求的数据写入到本地指定路径的文件中。

使用多线程分块下载技术的加速效果如下所示:

SFFT实现多线程分块下载技术的关键代码如下:

断点续下

断点续下是指在下载过程中,因网络中断、客户端崩溃或其他原因,导致下载未完成时,能够从中断的位置继续下载,而不需要从头开始下载的技术。断点续下的目的是为了避免重复的数据传输,节省下载时间,防止已下载数据丢失。

SFFT基于ohos.data.relationalStore(rdb)和缓存机制实现断点续下。对于每一个新建的下载任务,其下载信息、配置信息、块信息将会被读取到缓存并持久化到数据库中,当下载任务被执行时,块信息将会被定时性地更新,以保证下载进度的可靠性。当下载任务需要从被中断处开始继续下载时,SFFT将会从数据库中读取对应的下载任务信息和块信息,重新发起HTTP请求以继续获取目标文件剩余部分的字节数据。

使用断点续下技术继续下载的效果图如下所示:

SFFT实现断点续下技术的关键代码如下:

分片上传

分片上传是一种适用于大文件的上传机制,使用分片上传的客户端通常将文件分成多个较小的片段(或称为“分片”),然后并行地上传这些分片,以提高上传速率和上传的可靠性。在分片上传中,每一个分片是文件的一部分,通常具有固定的大小,每个分片在上传过程中被独立发送到服务端,当服务端接收到分片时,会根据分片中携带的序号信息保存每个分片,当全部分片上传完成后,服务端需要将分片拼接程完整的文件,并进行完整性校验。

SFFT基于HarmonyOS提供的Remote Communication Kit(rcp)底座能力,结合分片策略实现大文件的分片上传。对于一个上传任务,SFFT会根据设定参数和需要上传的本地文件的大小将文件分成若干个片,并在记录每个片的信息后并发发送多个POST请求,每个请求都会携带一个分片数据。在SFFT中,每一个分片请求的表单都会携带多个表单字段,包含文件的二进制数据、文件总分片数、文件哈希值,以及该片对应的序号信息。

SFFT实现分片上传技术的关键代码如下:

断点续传

与断点续下对应,断点续传是指在上传过程中,因网络中断、客户端崩溃或其他原因,导致上传未完成时,任务能够从中断的位置继续上传,而不需要从头开始上传的技术。断点续传同样是为了避免重复的数据传输,节约上传时间。

SFFT基于ohos.data.relationalStore(rdb)和缓存机制实现断点续传。对于每一个新建的上传任务,其上传信息、配置信息、分片信息都会被读取到缓存并持久化到数据库中,当上传任务被执行时,分片信息会根据上传请求的响应结果进行更新,并定期保存到数据库中,以保证上传进度的可靠性。当上传任务需要从被中断处开始继续上传时,SFFT会从数据库中读取还未上传成功的分片,重新发送HTTP请求以上传这些未成功的分片。

使用断点续传技术继续上传的效果图如下所示:

SFFT实现断点续传技术的关键代码如下:

自动重试

自动重试是一种在文件传输任务遇到异常(如网络断开、服务器超时等非手动因素造成的异常)中断后,系统自动尝试重新连接并恢复传输的机制,该机制保证在重连成功时继续传输文件,不再需要用户再次手动开启文件的上传或下载,有效节约用户时间。

回调机制

在大文件传输任务中,回调机制是用于处理异步操作的一种常见方式。通过回调函数,文件传输任务能够在传输的不同阶段向调用者报告当前的传输进度、响应头或错误。这些信息可为开发者开发UI界面提供更灵活的代码实现,根据文件传输状态变化UI界面。

关于上述介绍的SFFT三方库的部分功能特性与实现,如果读者需要阅读完整代码,可参考:super_fast_file_trans网络库


更多关于HarmonyOS鸿蒙Next中大文件高速并发传输解决方案(上)的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

HarmonyOS鸿蒙Next中大文件高速并发传输解决方案主要基于分布式数据管理和高效网络通信技术。系统通过分布式文件系统(DFS)实现跨设备的文件共享与访问,支持多设备间的数据同步与传输。采用高效的传输协议优化了网络带宽利用率,减少传输延迟。并发传输机制允许同时进行多个文件传输任务,通过任务调度和资源分配策略,确保大文件传输的高效性和稳定性。此外,鸿蒙Next还引入了智能路由技术,根据网络状况动态选择最优传输路径,进一步提升传输速度。系统还提供了断点续传功能,确保在传输中断后能够从中断点继续传输,减少重复传输的开销。这些技术共同构成了鸿蒙Next中大文件高速并发传输的核心解决方案。

更多关于HarmonyOS鸿蒙Next中大文件高速并发传输解决方案(上)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,实现大文件高速并发传输可基于以下技术:首先,采用多线程技术,通过创建多个线程并行传输文件的不同部分,显著提升传输效率。其次,利用分布式文件系统,支持文件分块存储与并行访问,优化传输性能。此外,引入智能调度算法,根据网络状况动态调整传输策略,确保传输稳定性与速度。最后,结合数据压缩与加密技术,在保障数据安全的同时减少传输数据量,进一步提升传输效率。这些技术共同构成了鸿蒙Next中大文件高速并发传输的解决方案。

回到顶部