具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本申请,而不能理解为对本申请的限制。
图1为根据本申请一个实施例的通过路由器进行下载的方法的流程图。
如图1所示,本申请实施例的通过路由器进行下载的方法,包括以下步骤:
S101,路由器接收客户端的下载请求,并获取下载请求对应的待下载内容。
在本申请的一个实施例中,客户端发送的网络报文需要经由路由器进行传输。S101具体包括:路由器接收客户端发送的网络报文,然后对该网络报文进行识别以获取客户端发送的下载请求。
具体地,路由器上设置有透明代理模块,该透明代理模块可将路由器接收到的网络报文转发至路由器上指定的socket(套接字),并由该socket将网络报文转发至网络报文的目的地址,以获取相应的数据。举例来说,路由器在接收到以太报文后,可通过修改以太头的方法对接收到的以太报文进行重定向,以将以太报文转往指定的socket。
在本申请的一个实施例中,该透明代理模块在将网络报文转发至socket后,socket可对网络报文进行识别。具体地,socket可通过网络报文的后缀识别网络报文是否为下载请求。举例来说,如果网络报文具有表示文件、压缩包等类型的后缀,例如.exe、.zip等,则判断该网络报文为下载请求,如果网络报文具有表示网页等类型的后缀,例如.html等,则判断该网络报文不是下载请求。当网络报文不为下载请求时,socket将该网络报文直接发送至其对应的目的地;当网络报文为下载请求时,socket可确定该网络报文即下载请求对应的待下载内容,并通过后续步骤进行下载。
S102,路由器将待下载内容分为N段内容,并建立M个线程以下载N段内容中的M段内容,其中,M,N为正整数,M小于或等于N。
在本申请的一个实施例中,路由器在接收到下载请求并获取其对应的待下载内容后,可将待下载内容分为N段内容,并建立M个线程以下载N段内容中的M段内容。作为一个优选的实施例,该M个线程可优先下载N段内容的前M段内容。
其中,可按照预设的划分规则对待下载内容进行划分。本申请对划分规则不做限定。例如,可根据待下载内容的大小将待下载内容平均分为N段内容。
举例来说,若路由器接收到的下载请求所对应的待下载文件的大小为200MB,可将该待下载文件平均分成10段内容,每个分段的大小为20MB,然后建立5个线程分别对该10段内容中的第1-5段内容进行下载。
S103,路由器在接收到第i段内容的下载数据之后,将第i段内容的下载数据返回至客户端,其中,i小于或等于N。
在本申请的一个实施例中,路由器在接收到第i段内容的下载数据之后,即可直接将第i段内容的下载数据返回至客户端,而其他分段的下载内容以本地临时文件的形式缓存到路由器中。其中,i小于或等于N。
由此,客户端接收到的数据都是完成的内容段,而不会因多段内容的数据穿插而造成数据混乱。
S104,在第i段内容下载完成并返回至客户端之后,路由器根据预设规则向客户端返回M段内容中路由器已下载的其他段内容。
在本申请的一个实施例中,在第i段内容下载完成并返回至客户端之后,路由器可判断第i+1段内容是否在路由器中下载完成。如果第i+1段内容在路由器中已下载完成,则将路由器中已下载的第i+1段内容返回至客户端,并进一步向客户端返回路由器中已下载的第i+2段内容;如果第i+1段内容在路由器中未下载完成,则将路由器中第i+1段内容的已下载部分返回至客户端,并等待第i+1段内容下载完成。对于第i+2段、第i+3段和第i+4段等其他分段的内容,路由器可依次对每段内容执行上述步骤,直至N段内容全部下载完成并返回至客户端。由此,在实时提高下载速度的同时,还可使路由器持续不断地向客户端返回下载内容的数据。
应当理解,在本申请的实施例中,首先被返回至客户端的第i段内容可为上述分段中的任意一段内容。例如,可为N段内容中过的第1段内容,当第一段的内容全部返回之后,再将第2、3…N段内容依次返回至客户端,从而客户端可将接收到内容依次进行合并即可得到待下载内容,非常简单方便。也可为经检测后确定的初始时刻下载速度最快的分段的内容,并为每段内容设置顺序标签,以使客户端根据该顺序标签进行合并得到待下载内容,从而能够使客户端尽快接收到响应数据,给客户端用户以极速的下载体验。本申请对具体的返回规则不做限定。
由此,通过在下载开始阶段就将某一段内容的下载数据返回至客户端,可防止因客户端长时间未接收到下载数据而被误认为下载请求未被响应,并避免因误判而断开连接。
在本申请的实施例中,在所述第i段内容下载完成之后,还可包括调用所述第i段内容对应的线程下载所述N段内容中未下载的部分。换而言之,如果M个线程中的一个或多个线程的下载任务完成,则空闲出的线程可继续下载其他的内容段,直至N段内容全部下载完成。即在上述示例中,当5个线程中的任意一个或多个线程所所下载的内容被下载完成后,其对应的线程将继续下载其他未下载的内容,直至10段内容均被下载完成。
在本申请的一个实施例中,空闲出的线程可对其他未开始下载的内容段进行下载,也可对已开始下载但是下载时间超过时间阈值的内容段的未完成部分进行下载。具体地,可将下载时间超过时间阈值的内容段的未完成部分划分为多个子内容段,并通过多个空闲进程对多个子内容段分别进行下载,从而提升了下载速度。
根据本申请实施例的通过路由器进行下载的方法,可由路由器接收客户端的下载请求,并将下载请求对应的待下载内容进行分段下载,并在下载过程中按照预设规则将每段内容返回至客户端,从而能够通过路由器实现实时下载,并且可通过多线程对待下载内容进行并行下载,提升了下载速度,实现了实时下载加速,此外,客户端可在下载开始后的短时间内接收到路由器反馈的数据,并可在整个下载过程中持续不断地接收来自路由器的数据,且无需客户端进行额外的数据处理,给客户端用户无缝的下载体验。
为实现上述实施例的通过路由器进行下载的方法,本申请还提出一种路由器。
图2为根据本申请一个实施例的路由器的结构框图。
如图2所示,本申请实施例的路由器,包括:获取模块10、下载模块20、第一返回模块30和第二返回模块40。
其中,获取模块10用于接收客户端的下载请求,并获取下载请求对应的待下载内容。
在本申请的一个实施例中,客户端发送的网络报文需要经由路由器进行传输。获取模块10具体用于:接收客户端发送的网络报文,然后对该网络报文进行识别以获取客户端发送的下载请求。
具体地,路由器上设置有透明代理模块,该透明代理模块可将路由器接收到的网络报文转发至路由器上指定的socket,并由该socket将网络报文转发至网络报文的目的地址,以获取相应的数据。举例来说,路由器在接收到以太报文后,可通过修改以太头的方法对接收到的以太报文进行重定向,以将以太报文转往指定的socket。
在本申请的一个实施例中,该透明代理模块在将网络报文转发至socket后,socket可对网络报文进行识别。具体地,socket可通过网络报文的后缀识别网络报文是否为下载请求。举例来说,如果网络报文具有表示文件、压缩包等类型的后缀,例如.exe、.zip等,则判断该网络报文为下载请求,如果网络报文具有表示网页等类型的后缀,例如.html等,则判断该网络报文不是下载请求。当网络报文不为下载请求时,socket将该网络报文直接发送至其对应的目的地;当网络报文为下载请求时,socket可确定该网络报文即下载请求对应的待下载内容,并通过后续步骤进行下载。
下载模块20用于将待下载内容分为N段内容,并建立M个线程以下载N段内容中的M段内容,其中,M,N为正整数,M小于或等于N。
在本申请的一个实施例中,路由器的获取模块10在接收到下载请求并获取其对应的待下载内容后,可由下载模块20将待下载内容分为N段内容,并建立M个线程以下载N段内容中的M段内容。作为一个优选的实施例,该M个线程可优先下载N段内容的前M段内容。
其中,下载模块20可按照预设的划分规则对待下载内容进行划分。本申请对划分规则不做限定。例如,下载模块20可根据待下载内容的大小将待下载内容平均分为N段内容。
举例来说,若路由器接收到的下载请求所对应的待下载文件的大小为200MB,下载模块20可将该待下载文件平均分成10段内容,每个分段的大小为20MB,然后建立5个线程分别对该10段内容中的第1-5段内容进行下载。
第一返回模块30用于在接收到第i段内容的下载数据之后,将第i段内容的下载数据返回至客户端,其中,i小于或等于N。
在本申请的一个实施例中,路由器在接收到第i段内容的下载数据之后,即可直接由第一返回模块30将第i段内容的下载数据返回至客户端,而其他分段的下载内容以本地临时文件的形式缓存到路由器中。其中,i小于或等于N。由此,客户端接收到的数据都是完成的内容段,而不会因多段内容的数据穿插而造成数据混乱。
第二返回模块40用于在第i段内容下载完成并返回至客户端之后,根据预设规则向客户端返回M段内容中路由器已下载的其他段内容。
在本申请的一个实施例中,在第i段内容下载完成并返回至客户端之后,第二返回模块40可判断第i+1段内容是否在路由器中下载完成。如果第i+1段内容在路由器中已下载完成,则第二返回模块40将路由器中已下载的第i+1段内容返回至客户端,并进一步向客户端返回路由器中已下载的第i+2段内容;如果第i+1段内容在路由器中未下载完成,则第二返回模块40将路由器中第i+1段内容的已下载部分返回至客户端,并等待第i+1段内容下载完成。对于第i+2段、第i+3段和第i+4段等其他分段的内容,路由器的第二返回模块40依次对每段内容执行上述步骤,直至N段内容全部下载完成并返回至客户端。由此,在实时提高下载速度的同时,还可使路由器持续不断地向客户端返回下载内容的数据。
应当理解,在本申请的实施例中,首先被返回至客户端的第i段内容可为上述分段中的任意一段内容。例如,可为N段内容中过的第1段内容,当第一段的内容全部返回之后,再将第2、3…N段内容依次返回至客户端,从而客户端可将接收到内容依次进行合并即可得到待下载内容,非常简单方便。也可为经检测后确定的初始时刻下载速度最快的分段的内容,并为每段内容设置顺序标签,以使客户端根据该顺序标签进行合并得到待下载内容,从而能够使客户端尽快接收到响应数据,给客户端用户以极速的下载体验。本申请对具体的返回规则不做限定。
由此,通过在下载开始阶段就将某一段内容的下载数据返回至客户端,可防止因客户端长时间未接收到下载数据而被误认为下载请求未被响应,并避免因误判而断开连接。
在本申请的实施例中,在所述第i段内容下载完成之后,还可包括调用所述第i段内容对应的线程下载所述N段内容中未下载的部分。换而言之,如果M个线程中的一个或多个线程的下载任务完成,则空闲出的线程可继续下载其他的内容段,直至N段内容全部下载完成。即在上述示例中,当5个线程中的任意一个或多个线程所所下载的内容被下载完成后,其对应的线程将继续下载其他未下载的内容,直至10段内容均被下载完成。
在本申请的一个实施例中,空闲出的线程可对其他未开始下载的内容段进行下载,也可对已开始下载但是下载时间超过时间阈值的内容段的未完成部分进行下载。具体地,可将下载时间超过时间阈值的内容段的未完成部分划分为多个子内容段,并通过多个空闲进程对多个子内容段分别进行下载,从而提升了下载速度。
根据本申请实施例的路由器,通过接收客户端的下载请求,并将下载请求对应的待下载内容进行分段下载,并在下载过程中按照预设规则将每段内容返回至客户端,从而能够通过路由器实现实时下载,响应速度快,并且可通过多线程对待下载内容进行并行下载,提升了下载速度,实现了实时下载加速,此外,客户端可在下载开始后的短时间内接收到路由器反馈的数据,并可在整个下载过程中持续不断地接收来自路由器的数据,且无需客户端进行额外的数据处理,给客户端用户带来无缝的下载体验。
在本申请的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“长度”、“宽度”、“厚度”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”、“顺时针”、“逆时针”、“轴向”、“径向”、“周向”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本申请和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本申请的限制。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本申请的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
在本申请中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”、“固定”等术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或成一体;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系,除非另有明确的限定。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本申请中的具体含义。
在本申请中,除非另有明确的规定和限定,第一特征在第二特征“上”或“下”可以是第一和第二特征直接接触,或第一和第二特征通过中间媒介间接接触。而且,第一特征在第二特征“之上”、“上方”和“上面”可是第一特征在第二特征正上方或斜上方,或仅仅表示第一特征水平高度高于第二特征。第一特征在第二特征“之下”、“下方”和“下面”可以是第一特征在第二特征正下方或斜下方,或仅仅表示第一特征水平高度小于第二特征。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
尽管上面已经示出和描述了本申请的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本申请的限制,本领域的普通技术人员在本申请的范围内可以对上述实施例进行变化、修改、替换和变型。