文件传输方法、系统及计算机可读存储介质与流程

    专利2022-07-07  94


    本发明涉及文件传输技术领域,尤其涉及一种文件传输方法、系统及计算机可读存储介质。



    背景技术:

    在企业、医院和政府等多种应用场景中均具有传输大文件的传输需求。然而,各应用场景中的网络资源通常都是有限的,如,在医院这一场景中,由于医院每天拍摄医疗影像数量庞大,而医生数量有限,为了提升针对效率,就采用ai技术代替医生对医疗影像文件分析,也即当前的互联网医疗 ai模式,而很多医疗影像文件数据量都比较大,而医院带宽不高,无法满足患者对诊断结果的时效要求。于是,在传输数据量较大的大文件时,可能存在被有损压缩传输,或程序崩溃,或是独占网络资源导致其他网络资源无法正常传输,亦或是传输过程中仍然需要等到文件继续上传或下载完才能结束。

    因此,目前的文件传输方案,在传输数据量较大的大文件时,容易被损坏或导致应用程序崩溃等问题,导致文件传输效果不佳。



    技术实现要素:

    本发明主要目的在于提供一种文件传输方法、文件传输系统及计算机可读存储介质,旨在解决现有技术中在传输数据量较大的大文件时,文件传输效果不佳的问题。

    为实现上述目的,本发明提供一种文件传输方法,所述方法包括以下步骤:

    采用零拷贝方式从客户端的存储器中读取待传输的目标文件,并对所述目标文件的传输网络的网络状况进行监测;

    根据所监测的网络状况和所述目标文件的文件大小确定所述目标文件的分段方式,并按照所确定的分段方式将所述目标文件切分为多个分段数据块;

    采用多线程将切分后的多个分段数据块从客户端并行传输至多个服务器,并将各服务器接收到的分段数据块异步上传至目标终端进行合并,使目标终端得到完整的所述目标文件。

    可选地,采用零拷贝方式从客户端的存储器中读取待传输的目标文件,并对所述目标文件的传输网络的网络状况进行监测;

    根据所监测的网络状况和所述目标文件的文件大小确定所述目标文件的分段方式,并按照所确定的分段方式将所述目标文件切分为多个分段数据块;

    采用多线程将切分后的多个分段数据块从客户端并行传输至多个服务器,并将各服务器接收到的分段数据块异步上传至目标终端进行合并,使目标终端得到完整的所述目标文件。

    可选地,所述根据所监测的网络状况和所述目标文件的文件大小确定所述目标文件的分段方式的步骤包括:

    若所述网络状况处于波动状态,则在每传输一次分段数据块后,根据传输后的网络速率和未传输的目标文件大小确定分段数据块的第二数量和第二大小;

    将所述目标文件的分段方式确定为按照所述第二数量将所述目标文件切分为所述第二大小的分段数据块。

    可选地,所述采用多线程将切分后的多个分段数据块从客户端并行传输至多个服务器的步骤包括:

    将切分后的多个分段数据块进行压缩,得到压缩后的各分段数据块;

    采用多线程以多路复用的方式将压缩后的各分段数据块,从客户端并行传输至多个服务器。

    可选地,所述将各服务器接收到的分段数据块异步上传至目标终端进行合并,使目标终端得到完整的所述目标文件的步骤包括:

    为所述多个服务器开启多个数据传输开关;

    将各服务器接收到的分段数据块,通过所述多个数据传输开关异步上传至目标终端进行合并,使目标终端得到完整的所述目标文件。

    可选地,在采用多线程将切分后的多个分段数据块并行传输至多个服务器时,所述方法还包括:

    监听各线程在传输分段数据块时的执行情况;

    若多线程中存在至少一个线程的分段数据块传输失败,则取消所述多线程中的每一个线程。

    可选地,所述将各服务器接收到的分段数据块异步上传至目标终端进行合并,使目标终端得到完整的所述目标文件的步骤包括:

    将各服务器接收到的分段数据块异步上传至目标终端;

    由所述目标终端根据各分段数据块的位置标识信息和分段数据块的数量信息,运用合并工具将各分段数据块在目标终端的进行合并处理,并以零拷贝方式写入所述目标终端的内存中,使所述目标终端得到完整的所述目标文件。

    可选地,所述采用零拷贝方式从存储器中读取待传输的目标文件的步骤包括:

    在接收到目标终端发送的获取目标数据的数据请求时,采用零拷贝方式从存储器中读取待传输的目标文件,以将所述目标文件传输至所述目标终端。

    此外,为实现上述目的,本发明还提供一种文件传输系统,所述文件传输系统包括存储器、处理器及存储在所述处理器上并可在处理器上运行的文件传输程序,所述处理器执行所述文件传输程序时实现如上所述的文件传输方法的步骤。

    此外,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有文件传输程序,所述文件传输程序被处理器执行时实现如上所述的文件传输方法的步骤。

    本发明实施例中,通过采用零拷贝方式从客户端的存储器中读取待传输的目标文件,并对所述目标文件的传输网络的网络状况进行监测,然后根据所监测的网络状况和所述目标文件的文件大小确定所述目标文件的分段方式,并按照所确定的分段方式将所述目标文件切分为多个分段数据块,再采用多线程将切分后的多个分段数据块从客户端并行传输至多个服务器,并将各服务器接收到的分段数据块异步上传至目标终端进行合并,使目标终端得到完整的目标文件,避免直接传输目标文件时,容易因目标文件过大导致网络堵塞和文件损坏等情况发生,而影响目标文件的传输效果,通过文件分割与多线程并行传输以及异步上传,提高了文件传输速率,进而提高了文件传输效果。

    附图说明

    图1为本发明实施例方案涉及的硬件运行环境的文件传输系统结构示意图;

    图2是本发明文件传输方法第一实施例的流程示意图;

    图3为本发明文件传输方法第二实施例的流程示意图;

    图4为本发明文件传输方法第三实施例的流程示意图。

    本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

    具体实施方式

    应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

    本发明的主要解决方案是:采用零拷贝方式从客户端的存储器中读取待传输的目标文件,并对所述目标文件的传输网络的网络状况进行监测;根据所监测的网络状况和所述目标文件的文件大小确定所述目标文件的分段方式,并按照所确定的分段方式将所述目标文件切分为多个分段数据块;采用多线程将切分后的多个分段数据块从客户端并行传输至多个服务器,并将各服务器接收到的分段数据块异步上传至目标终端进行合并,使目标终端得到完整的所述目标文件。

    由于不同的应用场景中网络资源通常都是有限的,然而在有限的网络资源下,进行大文件传输时,通常会存在传输文件被损坏或应用程序崩溃等造成网络阻塞,导致文件传输效果不佳。因而,本发明提出一种文件传输方法、系统及计算机可读存储介质,通过采用零拷贝方式从客户端的存储器中读取待传输的目标文件,并对目标文件的传输网络的网络状况进行监测,然后根据所监测的网络状况和目标文件的文件大小确定目标文件的分段方式,并按照所确定的分段方式将目标文件切分为多个分段数据块,再采用多线程将切分后的多个分段数据块从客户端并行传输至多个服务器,并将各服务器接收到的分段数据块异步上传至目标终端进行合并,使目标终端得到完整的所述目标文件,避免直接传输目标文件导致网络堵塞或目标文件损坏等情况发生而影响目标文件的传输效果。通过文件分割、多线程并行传输和异步上传等方式,提高了文件传输速率与可靠性,使得接收方能够得到完整的目标文件,进而提高了目标文件的传输效果。

    参照图1,图1为本发明实施例方案涉及的硬件运行环境的文件传输系统结构示意图。

    如图1所示,该文件传输系统可以包括:通信总线1002,处理器1001,例如cpu,用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(display)、输入单元比如键盘(keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如wi-fi接口)。存储器1005可以是高速ram存储器,也可以是稳定的存储器(non-volatilememory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。

    本领域技术人员可以理解,图1中示出的文件传输系统结构并不构成对文件传输系统的限定,可以包括比图示更多或更少的部件,或组合某些部件,或者不同的部件布置。

    在图1所示的文件传输系统中,网络接口1004主要用于连接后台服务器,与后台服务器进行数据通信;用户接口1003主要用于连接客户端(用户端),与客户端进行数据通信;而处理器1001可以用于调用存储器1005中存储的文件传输程序,并执行以下操作:

    采用零拷贝方式从客户端的存储器中读取待传输的目标文件,并对所述目标文件的传输网络的网络状况进行监测;

    根据所监测的网络状况和所述目标文件的文件大小确定所述目标文件的分段方式,并按照所确定的分段方式将所述目标文件切分为多个分段数据块;

    采用多线程将切分后的多个分段数据块从客户端并行传输至多个服务器,并将各服务器接收到的分段数据块异步上传至目标终端进行合并,使目标终端得到完整的所述目标文件。

    可选地,处理器1001可以调用存储器1005中存储的文件传输程序,还执行以下操作:

    若所述网络状况处于稳定状态,则根据传输网络的网络带宽和所述目标文件的文件大小确定分段数据块的第一数量和第一大小;

    将所述目标文件的分段方式确定为按照所述第一数量将所述目标文件切分为所述第一大小的分段数据块。

    可选地,处理器1001可以调用存储器1005中存储的文件传输程序,还执行以下操作:

    若所述网络状况处于波动状态,则在每传输一次分段数据块后,根据传输后的网络速率和未传输的目标文件大小确定分段数据块的第二数量和第二大小;

    将所述目标文件的分段方式确定为按照所述第二数量将所述目标文件切分为所述第二大小的分段数据块。

    可选地,处理器1001调用存储器1005中存储的文件传输程序,并执行以下操作:

    将切分后的多个分段数据块进行压缩,得到压缩后的各分段数据块;

    采用多线程以多路复用的方式将压缩后的各分段数据块,从客户端并行传输至多个服务器。

    可选地,处理器1001可以调用存储器1005中存储的文件传输程序,还执行以下操作:

    为所述多个服务器开启多个数据传输开关;

    将各服务器接收到的分段数据块,通过所述多个数据传输开关异步上传至目标终端进行合并,使目标终端得到完整的所述目标文件。

    可选地,在采用多线程将切分后的多个分段数据块并行传输至多个服务器时,处理器1001可以调用存储器1005中存储的文件传输程序,还执行以下操作:

    监听各线程在传输分段数据块时的执行情况;

    若多线程中存在至少一个线程的分段数据块传输失败,则取消所述多线程中的每一个线程。

    可选地,处理器1001可以调用存储器1005中存储的文件传输程序,还执行以下操作:

    将各服务器接收到的分段数据块异步上传至目标终端;

    由所述目标终端根据各分段数据块的位置标识信息和分段数据块的数量信息,运用合并工具将各分段数据块在目标终端的进行合并处理,并以零拷贝方式写入所述目标终端的内存中,使所述目标终端得到完整的所述目标文件。

    可选地,处理器1001可以调用存储器1005中存储的文件传输程序,还执行以下操作:

    在接收到目标终端发送的获取目标数据的数据请求时,采用零拷贝方式从存储器中读取待传输的目标文件,以将所述目标文件传输至所述目标终端。

    参照图2,图2为本发明文件传输方法的第一实施例流程图,本实施例中,所述文件传输方法包括以下步骤:

    步骤s10:采用零拷贝方式从客户端的存储器中读取待传输的目标文件,并对所述目标文件的传输网络的网络状况进行监测;

    为了避免直接传输完整的大文件,导致传输过程中因文件过大或网络超时等原因发生传输文件受损或系统崩溃等情况,进而对文件传输效果产生影响,本实施例中,通过将待传输的大文件切分为多个小的分段数据块,然后采用多线程将切分后的多个分段数据块从客户端并行传输至服务器端,通过服务器端与目标终端交互,使得目标终端能够得到完整的目标文件,完成大文件的传输。

    具体地,在对待传输的大文件进行切分或分割之前,先要从客户端的存储器(如磁盘)中读取待传输的目标文件,读取目标文件的方式可以是以零拷贝方式读取。其中,零拷贝是指cpu不执行从一个存储区域拷贝数据到另一个存储区域的任务,通常是在通过网络传输文件时用于减少cpu周期和内存带宽。其具体实现方式可以是:基于javanio的filechannel提供的map()方法,该方法可以在一个打开的文件和mappedbytebuffer之间建立一个虚拟内存映射,mappedbytebuffer继承于bytebuffer,类似于一个基于内存的缓冲区,可以省掉原来内核的文件读取缓冲区拷贝数据到用户缓冲区的拷贝过程。其中,javanio(javanon-blockingio)是java非阻塞式io;filechannel是一个连接到文件的通道,通过文件通道可读写文件,且文件通道总是运行在阻塞模式下;mappedbytebuffer是映射到文件的字节缓冲区;bytebuffer是一个字节缓冲区;map()方法是创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。于是,采用零拷贝方式从客户端的存储器中读取待传输的目标文件能够有效减少数据拷贝和共享总线操作的次数,消除传输数据在存储器之间不必要的中间拷贝次数,从而有效地提高数据传输效率。

    然而,从客户端读取的目标文件,可能是大文件也可能是小文件,因而,需要对目标文件的文件大小进行甄别。而甄别目标文件是大文件还是小文件的方式可以是:预先设置一个文件阈值,作为甄别目标文件的依据。在目标文件的文件大小大于或等于文件阈值时,认为目标文件是大文件;在目标文件的文件大小小于文件阈值时,认为目标文件是小文件。而预先设置的文件阈值可以是默认设置也可以是用户自定义设置的固定值,在一较优的实施方案中,可结合网络状况动态设置文件阈值,如,在网络质量较差时,可以适当减小文件阈值,在网络质量较好时,可以合理增大文件阈值。

    一实施例中,所读取的目标文件并非是任意选取的文件,而是目标终端侧用户具有读取需求的文件。因而,在采用零拷贝方式从客户端的存储器中读取待传输的目标文件之前,还需要检测是否接收到目标终端发送的获取目标数据的数据请求,若接收到,则采用零拷贝方式从存储器中读取待传输的目标文件,以最终将目标文件传输至目标终端;若未接收到,则继续监听是否接收到目标终端发送的获取目标数据的数据请求。

    另外,在采用零拷贝方式从客户端的存储器中读取待传输的目标文件之后,还需要对目标文件的传输网络的网络状况进行监测,目标文件的传输网络尤指用于传输目标文件的网络,所监测的网络状况可包括网络是否稳定和网络是否可靠等,具体可依据网络传输速率和网络带宽等参数进行反映。

    步骤s20:根据所监测的网络状况和所述目标文件的文件大小确定所述目标文件的分段方式,并按照所确定的分段方式将所述目标文件切分为多个分段数据块;

    从客户端读取目标文件之后,为了适应网络环境,提高文件传输速率,可通过将目标文件分成大小相等的多个分段数据块的方式,或者是将目标文件分成大小不等的多个分段数据块的方式;亦或者是随着时间的推移,动态调整所划分的多个分段数据块的数量与大小等方式对目标文件进行分段。具体可根据所监测的网络状况和目标文件的文件大小确定目标文件的分段方式。如,在网络状况良好(如,当前网速在第一范围)时,可以直接将目标文件分成大小相等的预设个数的分段数据块,而所划分的预设个数,还需根据目标文件的大小进行确定;在网络状况一般(如,当前网速在第二范围内)时,可将目标文件分成大小不等的多个分段数据块的方式,具体分为多少个数据块,每个数据块的大小如何,不仅取决于目标文件的大小,还可依据历史传输情况或历史网络数据进行确定,避免网络状况一般时因存在网络波动性的可能性,导致网络波动时无法及时适应网速的变化,而影响文件传输速率;在网络状况较差(如,当前网速在第三范围内)时,可动态调整所划分的多个分段数据块的数量与大小,避免网络波动性较大,容易占用过多的网络资源,不仅不利于目标文件的传输,而且能够有效减少网络阻塞,如,可以先划分成较小的数据块进行传输,然后根据较小的数据块的传输情况决定是否需要调整下一次传输的数据块的大小,依次类推。其中,第一范围内的网速大于第二范围内的网速,第二范围内的网速大于第三范围内的网速。而对于网络状况的监测,可以是以当前一段时间内的网络数据结合历史网络数据进行学习得到网络状况预测模型,对下一时间段内的网络状况进行预测。

    另外,也可先根据网络带宽和目标文件的文件大小,进行多次测试,得到最佳的分段方式。如,在公网带宽为10mb,待传输的目标文件的压缩包为100mb,若将多线程固定设置为开启5个线程,则记录将分片大小设定为2mb时的第一传输耗时,并记录将分片大小设定为1mb时的第二传输耗时;然后将第一传输耗时和第二传输耗时进行比较,以耗时短者作为最终的分片大小,从而最佳的分片分段方式。

    步骤s30:采用多线程将切分后的多个分段数据块从客户端并行传输至多个服务器,并将各服务器接收到的分段数据块异步上传至目标终端进行合并,使目标终端得到完整的所述目标文件;

    在将目标文件切分为多个分段数据块之后,为了确保文件传输效果,使目标终端能够得到完整的目标文件,需要将切分后的多个数据块都传输到目标终端。而在传输过程中,为了提高传输速率,并合理利用网络资源,优选采用多线程技术以并行的方式传输切分后的多个分段数据块,其中,多线程技术尤指采用多个线程传输切分后的多个分段数据块,具体采用的线程数量可依据传输网络的带宽和需要传输的分段数据块的数量等进行确定,此处不做具体限定。这里,分段数据块的传输是先从客户端传输至多个服务器节点,每一个服务器节点可对应接收来自一个线程的分段数据块。且目标终端可以是多个服务器中的一个,也可以是独立于多个服务器存在的服务器或终端设备。

    并且一实施例中,在传输过程中,系统还会监听各线程在传输分段数据块时的执行情况,若多线程中存在至少一个线程的分段数据块传输失败,则取消多线程中的每一个线程,避免即使其他线程继续传输相应的分段数据,终端亦然无法得到完整的目标文件,造成网络资源的浪费。当然,在其他的一些实施例中,也可以支持断点续传,此时在完成目标文件的所有分段数据块的传输后才能合并恢复得到完整的目标文件,但是断点传输效率较低,且容易造成网络堵塞。

    在各服务器接收到相应线程传输的多个分段数据块之后,需要将接收到的多个分段数据块上传到目标终端进行汇总,且在上传汇总时,采用异步上传的方式进行上传,传输效率更高。具体地,在将各服务器接收到的分段数据块异步上传至目标终端之后,可由目标终端根据各分段数据块的位置标识信息(可包括起始位置标识信息和结束位置标志信息)和分段数据块的数量信息,运用合并工具(jdk提供的randomaccessfile工具)将各分段数据块在目标终端的进行并行合并处理,并在并行合并处理后以零拷贝方式写入目标终端的内存中,具体可以是采用linux直接以内存形式持久化存储到磁盘,使目标终端能够得到完整的目标文件,避免目标文件失效,导致需要重新传输,影响传输效率。

    本实施例通过采用零拷贝方式从客户端的存储器中读取待传输的目标文件,并对所述目标文件的传输网络的网络状况进行监测,然后根据所监测的网络状况和所述目标文件的文件大小确定目标文件的分段方式,并按照所确定的分段方式将所述目标文件切分为多个分段数据块,再采用多线程将切分后的多个分段数据块从客户端并行传输至多个服务器,并将各服务器接收到的分段数据块异步上传至目标终端进行合并,使目标终端得到完整的目标文件,可以避免因应用场景中网络资源有限导致的网络堵塞。也即,通过对目标文件执行分段操作,并采用多线程并行传输,能够避免直接传输完整的目标文件,导致文损坏或程序崩溃等情况发生,提高了文件传输效果。

    参照图3,图3为本发明文件传输方法的第二实施例流程图,本实施例中,所述文件传输方法包括以下步骤:

    步骤s11:采用零拷贝方式从客户端的存储器中读取待传输的目标文件,并对所述目标文件的传输网络的网络状况进行监测;

    步骤s12:若所述网络状况处于稳定状态,则根据传输网络的网络带宽和所述目标文件的文件大小确定分段数据块的第一数量和第一大小;

    步骤s13:将所述目标文件的分段方式确定为按照所述第一数量将所述目标文件切分为所述第一大小的分段数据块;

    步骤s14:按照所确定的分段方式将所述目标文件切分为多个分段数据块;

    步骤s15:采用多线程将切分后的多个分段数据块从客户端并行传输至多个服务器,并将各服务器接收到的分段数据块异步上传至目标终端进行合并,使目标终端得到完整的所述目标文件。

    本实施例中,在采用零拷贝方式从客户端的存储器中读取待传输的目标文件,并对目标文件的传输网络的网络状况进行监测之后,可根据所监测的网络状况和所述目标文件的文件大小确定目标文件的分段方式。而根据网络状况和目标文件的文件大小确定目标文件的分段方式可以是:在所监听到的网络状况为传输网络处于稳定状态时,根据传输网络的网络带宽和目标文件的文件大小确定目标文件的分段方式。而传输网络是否处于稳定状况,可结合历史网络数据和当前网络数据进行判断,如可通过历史网络数据和当前网络数据训练网络状况评估模型,以对当前网络状况进行评估。具体地,可先根据传输网络的网络带宽和目标文件的文件大小确定分段数据块的第一数量和第一大小,如,可在网络带宽较宽(大于预设带宽)且目标文件较大(大于预设文件大小)时,将第一数量设定为10,第一大小设定为2mb;在络带宽较宽但目标文件较小时,将第一数量设定为5,第一大小设定为2mb;在网络带宽较窄(小于预设带宽)且目标文件较小(小于预设文件大小)时,将第一数量设定为5,第一大小设定为1mb;在网络带宽较窄但目标文件较大时,可将第一数量设定为10,第一大小设定为1mb等。然后,将目标文件的分段方式确定为按照所确定的第一数量将目标文件切分为第一大小的分段数据块。也即,在网络状况稳定时,可以确定目标文件的分段方式为切分为固定数量与固定大小的多个分段数据块,第一数量也即切分的分段数据块的总数量,第一大小也即各分段数据块的统一大小。

    一实施例中,若传输网络的网络状况处于波动状态,则可根据每一次传输后的网络速率和未传输的目标文件大小确定目标文件的分段方式。具体地,可在每传输一次分段数据块后,先根据每一次传输后传输网络的网络速率和剩余未传输的目标文件大小确定分段数据块的第二数量和第二大小,然后将目标文件的分段方式确定为按照所述第二数量将所述目标文件切分为所述第二大小的分段数据块。也即,在网络状态波动时,可以根据网络速率和剩余未传输目标文件的分段数据块的数量与大小确定传输一次后,划分的分段数据块的第二数量和第二大小。如,可依据第一次传输后的网络速率作为下一次传输分段数据快的网络速率,若网络速率有所提高,则在下一次传输时,适当减少分段数量和/或增大分段数据块的大小,若网络速率有所降低,则在下一次传输时,适当增加分段数量和/或减小分段数据块的大小,以此类推。如此,便可以实现第二数量和第二大小的动态调整,避免网络资源占用过多导致网络堵塞,影响文件传输效果。

    本实施例通过采用零拷贝方式从客户端的存储器中读取待传输的目标文件,并对目标文件的传输网络的网络状况进行监测,然后在网络状况处于稳定状态时,根据传输网络的网络带宽和目标文件的文件大小确定分段数据块的第一数量和第一大小,再将目标文件的分段方式确定为按照第一数量将所述目标文件切分为所述第一大小的分段数据块,并按照所确定的分段方式将目标文件切分为多个分段数据块,然后采用多线程将切分后的多个分段数据块从客户端并行传输至多个服务器,并将各服务器接收到的分段数据块异步上传至目标终端进行合并,使目标终端得到完整的目标文件。也即,通过在网络状况处于稳定状态时,将目标文件切分为固定大小和数量的分段数据块进行传输,可以避免因传输文件过大导致的文件损坏,网络堵塞和程序崩溃等情况的发生,提高了文件传输效果。

    参照图4,图4为本发明文件传输方法的第三实施例流程图,本实施例中,所述文件传输方法包括以下步骤:

    步骤s21:采用零拷贝方式从客户端的存储器中读取待传输的目标文件,并对所述目标文件的传输网络的网络状况进行监测;

    步骤s22:根据所监测的网络状况和所述目标文件的文件大小确定所述目标文件的分段方式,并按照所确定的分段方式将所述目标文件切分为多个分段数据块;

    步骤s23:将切分后的多个分段数据块进行压缩,得到压缩后的各分段数据块;

    步骤s24:采用多线程以多路复用的方式将压缩后的各分段数据块,从客户端并行传输至多个服务器;

    步骤s25:将各服务器接收到的分段数据块异步上传至目标终端进行合并,使目标终端得到完整的所述目标文件。

    本实施例中,在将目标文件切分为多个分段数据块之后,为了进一步提高传输速率,需要对多分段数据块进行压缩处理。具体地,可先将切分后的多个分段数据块进行压缩,得到压缩后的各分段数据块,然后采用多线程以多路复用的方式将压缩后的各分段数据块从客户端并行传输至多个服务器。其中,多路复用也即一个信道同时传输多路信号,是一种以同一传输媒质(线路)承载多路信号进行通信的方式,可包括频分多路复用、时分多路复用和码分多路复用等。在多路复用的过程中,各路信号在送往传输媒质以前,需按一定的规则进行调制,以利于各路已调信号在媒质中传输,不致于被混淆,且在传到对方时可以使信号具有足够能量,且可用反调制的方法加以区分、恢复成原信号。接着,将各服务器接收到的分段数据块异步上传至目标终端进行合并,使目标终端得到完整的所述目标文件。其中,异步传输的方式可包括:使用第三方控件,如flash,activex等浏览器插件实现异步上传;使用隐藏的iframe(html标签)模拟异步上传;使用xmlhttprequest2来实现异步上传等。合并的过程可以是根据划分分段数据块时标记的起始位置和结束位置等信息进行合并,以保证合并得到的目标文件的可靠性。

    一实施例中,将各服务器接收到的分段数据块异步上传至目标终端进行合并,使目标终端得到完整的过程中,为了保证高效传输,需要为多个服务器开启多个数据传输开关,然后将各服务器接收到的分段数据块,通过所述多个数据传输开关异步上传至目标终端进行合并,使目标终端得到完整的目标文件。其中,所开启的输出传输开关可包括:muiti_accepton(使一个工作进程可以同时接收所有的新连接)、useepoll(使用epoll模型,以显著提高程序在大量并发连接中只有少量活跃的情况下的系统cpu利用率)、sendfileon(开启高效文件传输模式)、tcp_nopushon(减少网络报文段数量,防止网络阻塞)和tcp_nodelayon(防止磁盘阻塞,提高i/o性能)等。并且,epoll除可提供的水平触发(leveltriggered)外,还可提供边缘触发(edgetriggered),使得用户空间程序有可能缓存io状态,减少epoll_wait/epoll_pwait的调用,提高应用程序效率。

    本实施例通过对各分段数据块进行压缩可以减少数据的传输量,以多路复用的方式并行传输压缩后的分段数据块,可以有效提高传输速率,通过异步传输可以进一步提高传输速率。因此,通过将切分后的多个分段数据块进行压缩,得到压缩后的各分段数据块,再采用多线程以多路复用的方式将压缩后的各分段数据块,从客户端并行传输至多个服务器,然后将各服务器接收到的分段数据块异步上传至目标终端进行合并,可以有效提高文件传输速率,避免网络堵塞和文件损坏等情况发生,提高了文件传输效果。

    此外,本发明实施例还提供一种文件传输系统,所述文件传输系统包括存储器、处理器及存储在所述处理器上并可在处理器上运行的文件传输程序,所述处理器执行所述文件传输程序时实现如上所述文件传输方法的步骤。

    此外,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有文件传输程序,所述文件传输程序被处理器执行时实现如上所述的文件传输方法的步骤。

    需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。

    上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

    通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,电视,或者网络设备等)执行本发明各个实施例所述的方法。

    以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。


    技术特征:

    1.一种文件传输方法,其特征在于,所述文件传输方法包括以下步骤:

    采用零拷贝方式从客户端的存储器中读取待传输的目标文件,并对所述目标文件的传输网络的网络状况进行监测;

    根据所监测的网络状况和所述目标文件的文件大小确定所述目标文件的分段方式,并按照所确定的分段方式将所述目标文件切分为多个分段数据块;

    采用多线程将切分后的多个分段数据块从客户端并行传输至多个服务器,并将各服务器接收到的分段数据块异步上传至目标终端进行合并,使目标终端得到完整的所述目标文件。

    2.如权利要求1所述的文件传输方法,其特征在于,所述根据所监测的网络状况和所述目标文件的文件大小确定所述目标文件的分段方式的步骤包括:

    若所述网络状况处于稳定状态,则根据传输网络的网络带宽和所述目标文件的文件大小确定分段数据块的第一数量和第一大小;

    将所述目标文件的分段方式确定为按照所述第一数量将所述目标文件切分为所述第一大小的分段数据块。

    3.如权利要求1所述的文件传输方法,其特征在于,所述根据所监测的网络状况和所述目标文件的文件大小确定所述目标文件的分段方式的步骤包括:

    若所述网络状况处于波动状态,则在每传输一次分段数据块后,根据传输后的网络速率和未传输的目标文件大小确定分段数据块的第二数量和第二大小;

    将所述目标文件的分段方式确定为按照所述第二数量将所述目标文件切分为所述第二大小的分段数据块。

    4.如权利要求1所述的文件传输方法,其特征在于,所述采用多线程将切分后的多个分段数据块从客户端并行传输至多个服务器的步骤包括:

    将切分后的多个分段数据块进行压缩,得到压缩后的各分段数据块;

    采用多线程以多路复用的方式将压缩后的各分段数据块,从客户端并行传输至多个服务器。

    5.如权利要求4所述的文件传输方法,其特征在于,所述将各服务器接收到的分段数据块异步上传至目标终端进行合并,使目标终端得到完整的所述目标文件的步骤包括:

    为所述多个服务器开启多个数据传输开关;

    将各服务器接收到的分段数据块,通过所述多个数据传输开关异步上传至目标终端进行合并,使目标终端得到完整的所述目标文件。

    6.如权利要求1所述的文件传输方法,其特征在于,在采用多线程将切分后的多个分段数据块并行传输至多个服务器时,所述方法还包括:

    监听各线程在传输分段数据块时的执行情况;

    若多线程中存在至少一个线程的分段数据块传输失败,则取消所述多线程中的每一个线程。

    7.如权利要求1所述的文件传输方法,其特征在于,所述将各服务器接收到的分段数据块异步上传至目标终端进行合并,使目标终端得到完整的所述目标文件的步骤包括:

    将各服务器接收到的分段数据块异步上传至目标终端;

    由所述目标终端根据各分段数据块的位置标识信息和分段数据块的数量信息,运用合并工具将各分段数据块在目标终端的进行合并处理,并以零拷贝方式写入所述目标终端的内存中,使所述目标终端得到完整的所述目标文件。

    8.如权利要求1所述的文件传输方法,其特征在于,所述采用零拷贝方式从存储器中读取待传输的目标文件的步骤包括:

    在接收到目标终端发送的获取目标数据的数据请求时,采用零拷贝方式从存储器中读取待传输的目标文件,以将所述目标文件传输至所述目标终端。

    9.一种文件传输系统,其特征在于,所述文件传输系统包括存储器、处理器及存储在存储器上并可在处理器上运行的文件传输程序,所述处理器执行所述文件传输程序时实现权利要求1-8中任一项所述的文件传输方法的步骤。

    10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有文件传输程序,所述文件传输程序被处理器执行时实现如权利要求1-8中任一项所述的文件传输方法的步骤。

    技术总结
    本发明公开了一种文件传输方法,包括:采用零拷贝方式从客户端的存储器中读取待传输的目标文件,并对所述目标文件的传输网络的网络状况进行监测;根据所监测的网络状况和所述目标文件的文件大小确定所述目标文件的分段方式,并按照所确定的分段方式将所述目标文件切分为多个分段数据块;采用多线程将切分后的多个分段数据块从客户端并行传输至多个服务器,并将各服务器接收到的分段数据块异步上传至目标终端进行合并,使目标终端得到完整的所述目标文件。本发明还公开了一种文件传输系统及计算机可读存储介质。通过将目标文件划分为多个分段数据块,采用多线程并行传输至服务器,并从服务器异步上传至目标终端,提高了文件传输效果。

    技术研发人员:刘颖麒;辛张顺
    受保护的技术使用者:深圳市移卡科技有限公司
    技术研发日:2020.11.30
    技术公布日:2021.03.12

    转载请注明原文地址:https://wp.8miu.com/read-7375.html

    最新回复(0)