掌桥专利:专业的专利平台
掌桥专利
首页

一种多线程文件下载方法、装置、电子设备及存储介质

文献发布时间:2023-06-19 09:30:39


一种多线程文件下载方法、装置、电子设备及存储介质

技术领域

本申请涉及计算机网络技术,尤其涉及一种多线程文件下载方法、装置、电子设备及存储介质。

背景技术

内容分发网络(Content Delivery Network,CDN)是指利用分布在不同区域的节点服务器群组成流量分配管理网络平台,为用户提供内容的分散存储和高速缓存,并根据网络动态流量和负载状况,用户的请求导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决Internet网络拥挤的状况,提高用户访问网站的响应速度。

CDN服务器是一种分布式服务器,客户端通过向CDN服务器发送http请求,能够下载文件。从CDN服务器下载文件,现有技术方案主要有单线程下载及多线程(分段)下载。但是由于CDN服务器质量参差不齐,用户终端所处网络环境复杂,用户终端到CDN服务器之间的连接质量、下载速度很难保证。采用简单的单线程或多线程下载方案都不能规避掉连接质量较差下载速度较慢的风险。

发明内容

为解决上述技术问题,本申请实施例期望提供一种多线程文件下载方法、装置、电子设备及存储介质。

本申请的技术方案是这样实现的:

第一方面,提供了一种多线程文件下载方法,应用于终端设备,所述方法包括:

将待下载的目标文件进行逻辑分片,得到M个分片信息;其中,M取大于1的整数,所述分片信息包括每个分片在所述目标文件中的起始位置和结尾位置;

运行M个下载线程,与M个内容分发网络CDN节点建立连接,并基于所述M个分片信息,分别获取所述M个CDN节点发送的分片数据;

利用获取的所有分片数据,构建所述目标文件。

第二方面,提供了一种多线程下载装置,所述装置包括:

分片单元,用于将待下载的目标文件进行逻辑分片,得到M个分片信息;其中,M取大于1的整数,所述分片信息包括每个分片在所述目标文件中的起始位置和结尾位置;

通信单元,用于运行M个下载线程,与M个内容分发网络CDN节点建立连接,并基于所述M个分片信息,分别获取所述M个CDN节点发送的分片数据;

构建单元,用于利用获取的所有分片数据,构建所述目标文件。

第三方面,提供了一种终端设备,包括:处理器和配置为存储能够在处理器上运行的计算机程序的存储器,

其中,所述处理器配置为运行所述计算机程序时,执行前述方法的步骤。

第四方面,本申请实施例中还提供了一种计算机存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现前述方法的步骤。

本申请实施例中还提供了一种多线程文件下载方法、装置、电子设备及存储介质,该方法包括:将待下载的目标文件进行逻辑分片,得到M个分片信息;其中,M取大于1的整数,所述分片信息包括在每个分片在目标文件中的起始位置和结尾位置;运行M个下载线程,与M个内容分发网络CDN节点建立连接,并基于所述M个分片信息,分别获取所述M个CDN节点发送的分片数据;利用获取的所有分片数据,构建所述目标文件。这样,在对目标文件执行多线程下载时,通过与多个不同CDN节点同时建立连接,实现多线程并行下载,能够保证下载稳定性,提高下载速度,从而避免因CDN节点异常导致的下载中断或下载速度变慢的问题。

附图说明

图1为本申请实施例中多线程文件下载方法的第一流程示意图;

图2为本申请实施例中应用层实现http请求的流程示意图;

图3为本申请实施例中多线程下载的整体网络构架示意图;

图4为本申请实施例中执行http请求的网络框架示意图;

图5为本申请实施例中多线程文件下载方法的第二流程示意图;

图6为本申请实施例中终端设备与CDN网络的连接构架;

图7为本申请实施例中多线程文件下载方法的第三流程示意图;

图8为本申请实施例中多线程文件下载装置的组成结构示意图;

图9为本申请实施例中终端设备的组成结构示意图。

具体实施方式

为了能够更加详尽地了解本申请实施例的特点与技术内容,下面结合附图对本申请实施例的实现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本申请实施例。

图1为本申请实施例中多线程文件下载方法的第一流程示意图,如图1所示,该方法具体可以包括:

步骤101:将待下载的目标文件进行逻辑分片,得到M个分片信息;其中,M取大于1的整数,所述分片信息包括每个分片在所述目标文件中的起始位置和结尾位置;

需要说明的是,对目标文件进行逻辑分片,可以是均匀分片或非均匀分片,分片也可以理解为对目标文件进行分段,实现多线程并发下载。每个分片信息中包括每个分片在目标文件中的起始位置和结尾位置。比如,目标文件的大小500个字节,第一个分片信息为第0-99字节,第二个分片信息为第100-199字节,第三个分片信息为第200-299字节,第四分片信息为第300-399字节,第五分片信息为第400-499字节;根据分片信息CDN节点可以从目标文件中获取对应的分片数据并下发给终端。

步骤102:运行M个下载线程,与M个内容分发网络CDN节点建立连接,并基于所述M个分片信息,分别获取所述M个CDN节点发送的分片数据;

在一些实施例中,运行M个下载线程,通过应用层与M个CDN节点建立TCP连接。也就是说,本申请实施例为了与多个CDN节点建立连接实现多线下载,需要应用层独立实现Dns、TCP连接、TLS握手和http请求。

具体地,所述与M个内容分发网络CDN节点建立连接,包括:通过应用层向域名系统DNS服务器发送DNS请求,并接收所述DNS服务器返回的CDN节点的国际互联协议IP列表;从所述IP列表中选取M个IP地址;利用所述M个IP地址,通过应用层向所述M个CDN节点发起传输控制协议TCP连接请求;通过应用层与所述M个CDN节点进行安全传输层协议TLS握手,以建立TCP连接。

实际应用中,应用层向M个CDN节点发起TCP连接请求之后经过三次TLS握手以进行身份验证,验证通过后确定建立TCP连接。具体地,应用层向所述第一CDN节点发起安全传输层协议TLS握手,并接收所述第一CDN节点的数字证书;验证所述数字证书合法,与所述第一CDN节点建立TLS握手;其中,所述第一CDN节点为所述M个CDN节点中任意一个节点。

图2为本申请实施例中应用层实现http请求的流程示意图,如图2所示,http请求的过程如下:

1、域名解析;应用层向DNS服务器发送DNS请求,DNS请求携带域名信息,DNS服务器解析域名,确定域名对应的IP列表;

2、TCP连接;应用层根据IP列表,能够从中获取多个IP地址,并向指定的IP地址发起连接请求;

3、TLS握手;向指定IP地址发起TLS握手,确保SNI(server name indicator)为目标CDN域名,从而获取CDN节点正确的数字证书,处理握手域名验证;

4、实现http请求,确保CDN服务能够解析到正确的域名请求,提供对应的下载服务;具体的,在http请求头上加个host,用来表示所请求的服务,http请求头中还应该目标文件的URL和分片信息。

在一些实施例中,所述基于所述M个分片信息,分别获取所述M个CDN节点发送的分片数据,包括:将所述M个分片信息,添加到http请求头,生成M个http请求;通过应用层向所述M个CDN节点分别发送不同的http请求,并接收所述M个CDN节点返回的http响应;其中,所述http响应中包含所下载的分片数据。

在一些实施例中,该方法还包括:在线程池中预先创建N个下载线程;其中,N取大于1的整数;基于分片结果,从所述N个下载线程选取执行多线程并发下载任务的所述M个下载线程。

需要说明的是,预先建立N个下载线程,再根据分片结果选择其中M个下载线程进行多线程下载。也可以直接根据分片结果直接建立M个下载线程。

步骤103:利用获取的所有分片数据,构建所述目标文件。

需要说明的是,由于目标文件是分片下载的,从CDN节点获取的数据是目标文件的部分数据。因此,在获取到分片数据后,还需要根据分片数据在目标文件中的位置,还原出完整的目标文件。

在一些实施例中,该步骤具体可以包括:按照获取的先后顺序,依次将分片数据缓存到缓存队列;从所述缓存队列中读取分片数据,并按照位置指示信息将分片数据写入到目标文件的对应位置。

图3为本申请实施例中多线程下载的整体网络构架示意图,如图3所示,二进制任务中包含3个下载线程,每个下载线程包含连接(Connection)操作,和重试机制(RetryPolicy);下载线程将获取的分片数据,依照获取顺序依次存放到缓存队列中,且每个分片数据包含了位置指示信息,写线程再将缓存队列中的分片数据按照位置指示信息写入到目标文件中,得到完整的目标文件。

图4为本申请实施例中执行http请求的网络框架示意图,示例性的,图4中连接池中包含3个连接,每个连接包含所述连接CDN节点的IP。

这里,步骤101至步骤103的执行主体可以为终端设备的处理器。

本申请中描述的终端可以包括诸如手机、平板电脑、笔记本电脑、掌上电脑、个人数字助理(Personal Digital Assistant,PDA)、便捷式媒体播放器(Portable MediaPlayer,PMP)、导航装置、可穿戴设备、智能手环、相机等。

采用上述技术方案,在对目标文件执行多线程下载时,通过与多个不同CDN节点同时建立连接,实现多线程并行下载,能够保证下载稳定性,提高下载速度,从而避免因CDN节点异常导致的下载中断或下载速度变慢的问题。

在本申请上述实施例的基础上,对本申请多线程文件下载方法进行进一步的举例说明,如图5所示,该方法具体包括:

步骤501:将待下载的目标文件进行逻辑分片,得到M个分片信息;其中,M取大于1的整数,所述分片信息包括每个分片在所述目标文件中的起始位置和结尾位置

需要说明的是,对目标文件进行逻辑分片,可以是均匀分片或非均匀分片,分片也可以理解为对目标文件进行分段,实现多线程并发下载。每个分片信息中包括每个分片在目标文件中的起始位置和结尾位置。比如,目标文件的大小500个字节,第一个分片信息为第0-99字节,第二个分片信息为第100-199字节,第三个分片信息为第200-299字节,第四分片信息为第300-399字节,第五分片信息为第400-499字节;根据分片信息CDN节点可以从目标文件中获取对应的分片数据并下发给终端。

步骤502:运行M个下载线程,与M个内容分发网络CDN节点建立连接;并基于所述M个分片信息,分别获取所述M个CDN节点发送的分片数据;

在一些实施例中,所述与M个内容分发网络CDN节点建立连接,包括:通过应用层向域名系统DNS服务器发送DNS请求,并接收所述DNS服务器返回的CDN节点的国际互联协议IP列表;从所述IP列表中选取M个IP地址;利用所述M个IP地址,通过应用层向所述M个CDN节点发起传输控制协议TCP连接请求;通过应用层与所述M个CDN节点进行安全传输层协议TLS握手,以建立TCP连接。

步骤503:监控与所述M个CDN节点之间的连接质量,得到质量评价结果;

需要说明的是,受不同CDN节点连接稳定性和自身质量的影响,终端与不同CDN节点的连接质量会有所差异,本申请实施例通过监测与不同CDN节点之间的连接质量,能够及时发现连接异常或下载速度较慢的异常CDN节点,从而断开与异常CDN节点的连接,转而与正常CDN节点连接,继续执行未完成的下载任务。

在一些实施例中,所述监控与所述M个CDN节点之间的连接质量,得到质量评价结果,包括:监控与所述M个CDN节点之间的连接质量,得到M个质量评价信息;其中,所述质量评价信息包括下载速度、连接耗时、连接中断次数中的至少一种;基于预设的质量评价标准和所述M个质量评价信息进行质量评价,得到M个质量评分。

这里,质量评价标准规定了如何根据不同质量评价信息进行质量评价。比如,确定每种质量评价信息的评分,对所有评分进行累加和,得到一个总的质量评分。

步骤504:基于所述质量评价结果,确定存在异常连接的异常CDN节点;

在一些实施例中,当质量评价结果用质量评分来表示时,可以通过设定评分阈值来确定异常节点。具体地,质量评分小于第一阈值时,确定为异常CDN节点;质量评分大于第二阈值时,确定为优质CDN节点。

步骤505:将与所述异常CDN节点的连接切换到其他正常CDN节点,以继续执行所述异常CDN节点未完成的下载任务;

这里,先向异常CDN节点发送断开连接指令,以断开连接,再通过连接操作与其他正常CDN节点建立TCP连接。

在一些实施例中,所述其他正常CDN节点包括所述IP列表中除所述M个IP地址之外其他IP地址所对应的CDN节点。

在一些实施例中,其他正常节点也可以为上述确定的M个CDN节点中的优质节点。具体地,所述优质CDN节点对应的下载任务完成之后,与所述异常CDN节点的连接切换到所述优质CDN节点。

图6为本申请实施例中终端设备与CDN网络的连接构架,如图6所示,终端设备可以和M个CDN节点(即Node1、Node2至NodeM)建立连接,在每个连接上发起http请求,请求对应文件分片的二进制流,每个线程从各自对应的CDN节点读取二进制流,并写入目标文件中,实现对目标文件的多线程并行下载。

步骤506:利用获取的所有分片数据,构建所述目标文件。

需要说明的是,由于目标文件是分片下载的,从CDN节点获取的数据是目标文件的部分数据。因此,在获取到分片数据后,还需要根据分片数据在目标文件中的位置,还原出完整的目标文件。

在一些实施例中,该步骤具体可以包括:按照获取的先后顺序,依次将分片数据缓存到缓存队列;从所述缓存队列中读取分片数据,并按照位置指示信息将分片数据写入到目标文件的对应位置。

这样,使用多源下载,能够完全规避节点下载速度、连接质量参差不齐造成的下载速度慢、下载中断问题,提升下载速度及稳定性,提升用户的下载体验,本申请这种多源下载不需要对CDN网络进行改变,就能够提升大概下载速度约10%,多CDN节点的多源下载,规避了CDN分布式网络节点本身质量和速度问题。

在本申请上述实施例的基础上,对本申请多线程文件下载方法进行进一步的举例说明,如图7所示,该方法具体包括:

步骤701:向服务器请求获取所述目标文件的头部信息;

步骤702:从所述目标文件的头部信息中获取所述目标文件大小;

实际应用中,目标文件的头部信息中还包括目标文件的统一资源定位符(UniformResource Locator,URL),用于指示目标文件位置。

步骤703:基于预设的分片长度和目标文件大小对所述目标文件进行逻辑分片,得到M个分片信息;

步骤704:运行M个下载线程,与M个内容分发网络CDN节点建立连接,并基于所述M个分片信息,分别获取所述M个CDN节点发送的分片数据;

步骤705:利用获取的所有分片数据,构建所述目标文件。

采用上述技术方案,在对目标文件执行多线程下载时,通过与多个不同CDN节点同时建立连接,实现多线程并行下载,能够保证下载稳定性,提高下载速度,从而避免因CDN节点异常导致的下载中断或下载速度变慢的问题。

为实现本申请实施例的方法,基于同一发明构思本申请实施例还提供了一种多线程下载装置,如图8所示,该装置包括:

分片单元801,用于将待下载的目标文件进行逻辑分片,得到M个分片信息;其中,M取大于1的整数,所述分片信息包括每个分片在所述目标文件中的起始位置和结尾位置;

通信单元802,用于运行M个下载线程,与M个内容分发网络CDN节点建立连接,并基于所述M个分片信息,分别获取所述M个CDN节点发送的分片数据;

构建单元803,用于利用获取的所有分片数据,构建所述目标文件。

在一些实施例中,该装置还包括监控单元,用于监控与所述M个CDN节点之间的连接质量,得到质量评价结果;基于所述质量评价结果,确定存在异常连接的异常CDN节点;将与所述异常CDN节点的连接切换到其他正常CDN节点,以继续执行所述异常CDN节点未完成的下载任务。

在一些实施例中,监控单元,具体用于监控与所述M个CDN节点之间的连接质量,得到M个质量评价信息;其中,所述质量评价信息包括下载速度、连接耗时、连接中断次数中的至少一种;基于预设的质量评价标准和所述M个质量评价信息进行质量评价,得到M个质量评分。

在一些实施例中,监控单元,具体用于质量评分小于第一阈值时,确定为异常CDN节点;质量评分大于第二阈值时,确定为优质CDN节点。

在一些实施例中,监控单元,具体用于所述优质CDN节点对应的下载任务完成之后,与所述异常CDN节点的连接切换到所述优质CDN节点。

在一些实施例中,通信单元802,具体用于通过应用层向域名系统DNS服务器发送DNS请求,并接收所述DNS服务器返回的CDN节点的国际互联协议IP列表;从所述IP列表中选取M个IP地址;利用所述M个IP地址,通过应用层向所述M个CDN节点发起传输控制协议TCP连接请求;通过应用层与所述M个CDN节点进行安全传输层协议TLS握手,以建立TCP连接。

在一些实施例中,所述其他正常CDN节点包括所述IP列表中除所述M个IP地址之外其他IP地址所对应的CDN节点。

在一些实施例中,所述通信单元802,具体用于将所述M个分片信息,添加到http请求头,生成M个http请求;通过应用层向所述M个CDN节点分别发送不同的http请求,并接收所述M个CDN节点返回的http响应;其中,所述http响应中包含所下载的分片数据。

在一些实施例中,通信单元802,还用于向服务器请求获取所述目标文件的头部信息;从所述目标文件的头部信息中获取所述目标文件大小;

相应的,分片单元801,具体用于基于预设的分片长度和目标文件大小对所述目标文件进行逻辑分片,得到M个分片信息。

在一些实施例中,该装置还包括:处理单元,用于在线程池中预先创建N个下载线程;其中,N取大于1的整数;基于分片结果,从所述N个下载线程选取执行多线程并发下载任务的所述M个下载线程。

在一些实施例中,通信单元802,还用于按照获取的先后顺序,依次将分片数据缓存到缓存队列;

构建单元803,用于从所述缓存队列中读取分片数据,并按照位置指示信息将分片数据写入到目标文件的对应位置。

基于上述多线程下载装置中各单元的硬件实现,本申请实施例还提供了一种终端设备,如图9所示,该终端设备包括:处理器901和配置为存储能够在处理器上运行的计算机程序的存储器902;

其中,处理器901配置为运行计算机程序时,执行前述实施例中的方法步骤。

当然,实际应用时,如图9示,该终端设备中的各个组件通过总线系统903耦合在一起。可理解,总线系统903用于实现这些组件之间的连接通信。总线系统903除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图9中将各种总线都标为总线系统903。

在实际应用中,上述处理器可以为特定用途集成电路(ASIC,ApplicationSpecific Integrated Circuit)、数字信号处理装置(DSPD,Digital Signal ProcessingDevice)、可编程逻辑装置(PLD,Programmable Logic Device)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、控制器、微控制器、微处理器中的至少一种。可以理解地,对于不同的设备,用于实现上述处理器功能的电子器件还可以为其它,本申请实施例不作具体限定。

上述存储器可以是易失性存储器(volatile memory),例如随机存取存储器(RAM,Random-Access Memory);或者非易失性存储器(non-volatile memory),例如只读存储器(ROM,Read-Only Memory),快闪存储器(flash memory),硬盘(HDD,Hard Disk Drive)或固态硬盘(SSD,Solid-State Drive);或者上述种类的存储器的组合,并向处理器提供指令和数据。

在示例性实施例中,本申请实施例还提供了一种计算机可读存储介质,例如包括计算机程序的存储器,计算机程序可由终端设备的处理器执行,以完成前述方法的步骤。

应当理解,在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。本申请中表述“具有”、“可以具有”、“包括”和“包含”、或者“可以包括”和“可以包含”在本文中可以用于指示存在对应的特征(例如,诸如数值、功能、操作或组件等元素),但不排除附加特征的存在。

应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开,不必用于描述特定的顺序或先后次序。例如,在不脱离本发明范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。

本申请实施例所记载的技术方案之间,在不冲突的情况下,可以任意组合。

在本申请所提供的几个实施例中,应该理解到,所揭露的方法、装置和设备,可以通过其它的方式实现。以上所描述的实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。

上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。

另外,在本申请各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。

相关技术
  • 一种多线程文件下载方法、装置、电子设备及存储介质
  • 一种镜像文件下载方法、装置、电子设备及存储介质
技术分类

06120112192777