一种资源下载的方法和设备.pdf

上传人:1*** 文档编号:4881927 上传时间:2018-11-21 格式:PDF 页数:26 大小:2.30MB
返回 下载 相关 举报
摘要
申请专利号:

CN201410260637.4

申请日:

2014.06.12

公开号:

CN103997544A

公开日:

2014.08.20

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):H04L 29/08申请日:20140612|||公开

IPC分类号:

H04L29/08; H04L29/06

主分类号:

H04L29/08

申请人:

网易(杭州)网络有限公司

发明人:

许飞; 关子敬

地址:

310052 浙江省杭州市滨江区长河街道网商路599号4幢7层

优先权:

专利代理机构:

北京信远达知识产权代理事务所(普通合伙) 11304

代理人:

赵百令;刘大玲

PDF下载: PDF下载
内容摘要

本发明的实施方式提供了一种资源下载的方法和设备。该方法包括:截获对当前资源的访问请求;通过资源关系索引文件,查找与所述当前资源具有依赖关系且所述客户端本地不存在的资源作为预测资源,其中所述资源关系索引文件为预先依据网络应用的完整客户端中各个资源之间依赖关系而生成的;从可用于下载所述预测资源的未占用线程中分配出第一线程,并利用所述第一线程下载所述预测资源到所述客户端本地。通过利用未占用线程预先下载客户端在访问当前资源之后接下来可能会访问的预测资源,本发明的方法不仅缩短了采用微端技术的客户端在资源加载过程中的加载延时,而且还避免了下载线程的浪费。此外,本发明的实施方式提供了一种资源下载的设备。

权利要求书

权利要求书1.  一种方法,包括:A)、截获对当前资源的访问请求;B)、通过资源关系索引文件,查找与所述当前资源具有依赖关系且所述客户端本地不存在的资源作为预测资源,其中所述资源关系索引文件为预先依据网络应用的完整客户端中各个资源之间依赖关系而生成的;C)、从可用于下载所述预测资源的未占用线程中分配出第一线程,并利用所述第一线程下载所述预测资源到所述客户端本地。2.  根据权利要求1所述的方法,其中,所述步骤C)包括:将下载所述预测资源的第一下载任务加入到第一任务集合中;响应于所述第一下载任务分得所述第一线程,从所述第一任务集合中取出所述第一下载任务,并利用所述第一线程下载所述预测资源到所述客户端本地。3.  根据权利要求2所述的方法,其中,按照各个下载任务加入第一任务集合的时间由后到先的顺序为所述第一任务集合中的各个下载任务分配线程。4.  根据权利要求1所述的方法,还包括:响应于所述客户端本地不存在所述当前资源,从可用于下载所述当前资源的未占用线程中分配出第二线程,并利用所述第二线程下载所述当前资源到所述客户端本地;响应于所述当前资源已分得第二线程且还存在可用于下载所述预测资源的未占用线程,进入步骤C)。5.  根据权利要求4所述的方法,所述响应于所述客户端本地不存在所述当前资源,从可用于下载所述当前资源的未占用线程中分配出第二线程,并利用所述第二线程下载所述当前资源到所述客户端本地,包括:响应于所述客户端本地不存在所述当前资源,将下载所述当前资源的第二下载任务加入到第二任务集合中;响应于所述第二下载任务分得所述第二线程,从所述第二任务集合中取出所述第二下载任务,并利用所述第二线程下载所述当前资源到所述客户端本地。6.  根据权利要求5所述的方法,其中,按照各个下载任务加入第二任务集合的时间由先到后的顺序为所述第二任务集合中的各个下载任务分配线程。7.  根据权利要求1所述的方法,还包括:响应于所述预测资源已分得第一线程且还存在可用于下载随机资源的未占用线程,随机选取所述客户端本地不存在的资源作为随机资源,并利用所述可用于下载随机资源的未占用线程下载所述随机资源。8.  根据权利要求4或7所述的方法,其中,所述客户端可用于下载资源的线程包括通用线程和专用线程,所述通用线程可用于下载所述当前资源、所述预测资源和所述随机资源,所述专用线程仅可用于下载所述当前资源。9.  根据权利要求1所述的方法,还包括:下载所述客户端的补丁文件;以所述补丁文件中所要修改的原始资源不存在于所述客户端本地的补丁数据作为待补丁数据,记录所述待补丁数据所要修改的原始资源;响应于所述待补丁数据所要修改的原始资源下载到所述客户端本地,对所述客户端应用所述待补丁数据。10.  根据权利要求9所述的方法,还包括:以所述补丁文件中所要修改的原始资源存在于所述客户端本地的补丁资源作为第一即时补丁数据,对所述客户端应用所述第一即时补丁数据;以所述补丁文件中用于为所述客户端增加资源的补丁数据作为第二即时补丁数据,对所述客户端应用所述第二即时补丁数据;以所述补丁文件中长度超过一个文件段的补丁数据为第三即时补丁数据,对所述客户端应用所述第三即时补丁数据。11.  一种设备,包括:访问截获模块,用于截获对当前资源的访问请求;预测资源查找模块,用于通过资源关系索引文件,查找与所述当前资源具有依赖关系且所述客户端本地不存在的资源作为预测资源,其中所述资源关系索引文件为预先依据网络应用的完整客户端中各个资源之间依赖关系而生成的;第一下载模块,用于从可用于下载所述预测资源的未占用线程中分配出第一线程,并利用所述第一线程下载所述预测资源到所述客户端本地。12.  根据权利要求11所述的设备,其中,所述第一下载模块包括:第一集合加入子模块,用于将下载所述预测资源的第一下载任务加入到第一任务集合中;第一集合取出子模块,用于响应于所述第一下载任务分得所述第一线程,从所述第一任务集合中取出所述第一下载任务,并利用所述第一线程下载所述预测资源到所述客户端本地。13.  根据权利要求12所述的设备,其中,按照各个下载任务加入第一任务集合的时间由后到先的顺序为所述第一任务集合中的各个下载任务分配线程。14.  根据权利要求11所述的设备,还包括:第二下载模块,用于响应于所述客户端本地不存在所述当前资源,从可用于下载所述当前资源的未占用线程中分配出第二线程,并利用所述第二线程下载所述当前资源到所述客户端本地;第一触发模块,用于响应于所述当前资源已分得第二线程且还存在可用于下载所述预测资源的未占用线程,触发所述第一下载模块。15.  根据权利要求14所述的设备,其中,所述第二下载模块包括:第二集合加入子模块,用于响应于所述客户端本地不存在所述当前资源,将下载所述当前资源的第二下载任务加入到第二任务集合中;第二集合取出子模块,用于响应于所述第二下载任务分得所述第二线程,从所述第二任务集合中取出所述第二下载任务,并利用所述第二线程 下载所述当前资源到所述客户端本地。16.  根据权利要求15所述的设备,其中,按照各个下载任务加入第二任务集合的时间由先到后的顺序为所述第二任务集合中的各个下载任务分配线程。17.  根据权利要求11所述的设备,还包括:第三下载模块,用于响应于所述预测资源已分得第一线程且还存在可用于下载随机资源的未占用线程,随机选取所述客户端本地不存在的资源作为随机资源,并利用所述可用于随机资源的未占用线程下载所述随机资源。18.  根据权利要求14或17所述的设备,其中,所述客户端可用于下载资源的线程包括通用线程和专用线程,所述通用线程可用于下载所述当前资源、所述预测资源和所述随机资源,所述专用线程仅可用于下载所述当前资源。19.  根据权利要求11所述的设备,还包括:补丁下载模块,用于下载所述客户端的补丁文件;补丁记录模块,用于以所述补丁文件中所要修改的原始资源不存在于所述客户端本地的补丁数据作为待补丁数据,记录所述待补丁数据所要修改的原始资源;第一补丁应用模块,用于响应于所述待补丁数据所要修改的原始资源下载到所述客户端本地,对所述客户端应用所述待补丁数据。20.  根据权利要求19所述的设备,还包括:第二补丁应用模块,用于以所述补丁文件中所要修改的原始资源存在于所述客户端本地的补丁资源作为第一即时补丁数据,对所述客户端应用所述第一即时补丁数据;第三补丁应用模块,用于以所述补丁文件中用于为所述客户端增加资源的补丁数据作为第二即时补丁数据,对所述客户端应用所述第二即时补丁数据;第四补丁应用模块,用于以所述补丁文件中长度超过一个文件段的补 丁数据为第三即时补丁数据,对所述客户端应用所述第三即时补丁数据。

说明书

说明书一种资源下载的方法和设备
技术领域
本发明的实施方式涉及信息技术领域,更具体地,本发明的实施方式涉及一种资源下载的方法和设备。
背景技术
本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
许多网络应用都为其自身提供了用于安装在用户终端设备上的客户端程序(简称客户端)。对于提供客户端的网络应用,网络应用的客户端需要先被下载并安装到用户终端设备上,然后通过客户端与服务器之间的信息交互,用户可以在客户端上实现对网络应用的使用和体验。通过客户端向用户提供网络应用,使得网络应用的一些数据可以随客户端保存在用户终端设备本地,从而避免用户每次使用网络应用时都从服务器下载全部数据,减少了用户使用网络应用时需要下载的数据以及网络应用使用过程中对网络资源的占用。
然而,随着网络应用所涉及的数据量越来越大,网络应用的客户端所包含资源的数据量也越来越大,导致用户下载客户端需要花费的时间也越来越长,这不仅造成了用户使用上的不便,也使得许多网络应用的用户在客户端下载的过程中流失。为了节省用户下载客户端需要花费的时间,使得用户能够尽早进入网络应用的使用和体验而不至于网络应用的用户流失,一些现有的网络应用采用了微客户端(简称微端)技术。具体地说,在微客户端技术中,提供给用户下载的客户端(即微端)仅包含网络应用最初使用时所必备的资源,而在客户端运行的过程中,通过接管客户端的文件访问,当发现客户端当前请求访问的资源不存在于客户端本地时去服 务器上下载该资源,直至网络应用提供给用户的所有资源都被下载到客户端本地,从而在用户终端设备上形成完整的客户端。通过微客户端技术,用户可以边使用网络应用边下载网络应用的资源,而无需等到完整客户端下载完成再使用网络应用,从而减小了用户需要下载的客户端中初始资源的数据量,节省了用户下载客户端所花费的时间。
发明内容
但是,随着网络应用的资源间依赖关系越来越复杂,客户端在某些资源加载过程中需要访问的资源也越来越多。此时,对于本次资源加载过程中所需要的资源,客户端在资源加载过程中往往并不是一次性地去请求访问所有的资源,而是分多次去分别请求访问一部分资源。具体地,在资源加载过程中,客户端先发起对一部分资源的访问请求,访问到这部分资源时对这部分资源进行解析,之后再发起对下一部分资源的访问请求,直至本次资源加载过程所需要的资源都被下载,完成本次资源加载过程。例如,对于三维(3D)网络游戏来说,相对于二维(2D)网络游戏,客户端在对一个角色或场景进行加载时,3D游戏需要加载的资源会比2D游戏多很多。同样是对一个角色或场景进行加载,2D游戏的客户端通常仅需要加载图片文件,3D游戏的客户端则需要先获得角色或场景的模型描述文件,通过解析描述文件查找到需要访问的贴图、动画、特效等文件,再获得查找到的贴图、动画、特效等文件,从而完成角色或场景的加载。而且,3D游戏中角色或场景通常都比较复杂,可能由多部分相互依赖的资源组成,每部分资源都要分别经过描述文件的下载、解析以及贴图、动画、特效等文件的下载。
由此可见,对于像3D网络游戏这样资源间存在复杂依赖关系的网络应用,在资源加载过程中需要经历的“解析—下载”链条比较长,而对于首次进行的资源加载过程,由于现有技术中采用微端技术的客户端仅下载当前请求访问且本地不存在的资源,就使得客户端在资源加载过程中需要按照“解析—下载”链条反复多次去下载其请求访问的资源,从而导致资 源加载过程的延时较长,并且,由于往往每次请求访问的资源都无法占用所有的下载线程,也造成了下载线程的浪费。
因此在现有技术中,在对彼此间存在复杂依赖关系的资源进行首次加载时,采用微端技术的网络应用客户端由于仅下载当前请求访问的资源,既导致了客户端加载资源的速度较慢,造成加载延时较长,也导致了下载线程的浪费,这是非常令人烦恼的过程。
为此,非常需要一种改进的资源下载的方法和设备,以避免现有技术中由于采用微端技术的网络应用客户端仅下载当前请求访问的资源,而导致的客户端加载资源速度较慢、加载延时较长以及浪费下载线程的缺陷。
在本上下文中,本发明的实施方式期望提供一种资源下载的方法和设备。
在本发明实施方式的第一方面中,提供了一种资源下载的方法,包括:截获客户端对当前资源的访问请求;通过资源关系索引文件,查找与所述当前资源具有依赖关系且所述客户端本地不存在的资源作为预测资源,其中所述资源关系索引文件为预先依据网络应用的完整客户端中各个资源之间依赖关系而生成的;从可用于下载所述预测资源的未占用线程中分配出第一线程,并利用所述第一线程下载所述预测资源到所述客户端本地。
在本发明实施方式的第二方面中,提供了一种资源下载的设备,包括:访问截获模块,用于截获对当前资源的访问请求;预测资源查找模块,用于通过资源关系索引文件,查找与所述当前资源具有依赖关系且所述客户端本地不存在的资源作为预测资源,其中所述资源关系索引文件为预先依据网络应用的完整客户端中各个资源之间依赖关系而生成的;第一下载模块,用于从可用于下载所述预测资源的未占用线程中分配出第一线程,并利用所述第一线程下载所述预测资源到所述客户端本地。
根据本发明实施方式用于资源下载的方法和设备,对采用微端技术的客户端来说,在客户端发起对当前资源的访问时,可以通过预先依据完整客户端中资源之间依赖关系而生成的资源关系索引文件,查找出与当前请求访问的当前资源具有依赖关系且客户端本地不存在的资源作为预测资 源,并可以利用从可用于下载该预测资源的未占用线程中分配出的第一线程来下载该预测资源到客户端本地。因此,由于与当前资源具有依赖关系的预测资源通常是当前资源访问之后就要访问的资源,一方面使得当前资源访问之后需要访问且本地不存在的预测资源可以预先地在客户端发起对当前资源的访问请求时下载,而无需等到访问并解析当前资源之后客户端发起对预测资源的访问请求时再去下载,从而显著地减少了资源加载过程中客户端下载资源的次数,加快了客户端资源首次加载的速度,并缩短了资源加载过程的加载延时,另一方面使得请求访问时当前资源未占用的线程可以被用来下载预测资源,从而避免了下载线程的浪费。
附图说明
通过参考附图阅读下文的详细描述,本发明示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,其中:
图1示意性地示出了本发明的实施方式的一个示例性应用场景的框架示意图;
图2示意性地示出了本发明中资源下载的方法一实施例的流程图;
图3示意性地示出了本发明实施例中资源间依赖关系示例的示意图;
图4示意性地示出了本发明中资源下载的方法另一实施例的流程图;
图5示意性地示出了本发明实施例中一个具体应用场景示例下的下载任务一处理方式的示意图;
图6示意性地示出了本发明中资源下载的方法又一实施例的流程图;
图7示意性地示出了本发明中资源下载的方法再一实施例的流程图;
图8示意性地示出了本发明实施例中待补丁数据合并一实施方式的实例示意图;
图9示意性地示出了本发明中资源下载的设备一实施例的结构图;
图10示意性地示出了本发明中资源下载的设备另一实施例的结构图;
图11示意性地示出了本发明中资源下载的设备又一实施例的结构图;
图12示意性地示出了本发明中资源下载的设备再一实施例的结构图;
图13示意性地示出了本发明中资源下载的设备又再一实施例的结构图;
在附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参考若干示例性实施方式来描述本发明的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本领域技术人员知道,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
根据本发明的实施方式,提出了一种资源下载的方法和设备。
在本文中,需要理解的是,所涉及的术语“微端”表示的是网络应用开发商提供的、用于安装在用户设备上的客户端程序,其在运行的过程中,可以在发起访问请求时判断请求访问的当前资源是否存在于其客户端本地,从而将不在本地的当前资源从服务器下载到本地。其中,所提及的“资源”表示的是网络应用在其客户端程序中所具有的各种文件和数据,一个“资源”既可以对应一个文件,也可以对应多个文件,本文对此并不限定。此外,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精 神。
发明概述
本发明人发现,现有的微端技术中,客户端在发起访问请求时仅是去下载当前请求访问的资源,因此,如果一个首次进行的资源加载过程中需要加载的资源彼此间具有复杂依赖关系,客户端就需要按照访问的顺序反复多次去下载,每一次下载的仅是客户端当前请求访问的资源,而往往下载客户端当前请求访问的资源并不会占用所有的线程,这就导致资源加载过程中无法同时利用所有的线程下载需要加载的资源,从而不仅使得客户端加载资源的速度较慢、加载延时较长,还造成了下载线程的浪费。
基于上述分析,本发明的基本思想在于:为了使得资源加载过程中可以尽可能同时利用更多的线程来下载资源,而不是仅下载客户端当前请求访问的资源,可以预先地确定出哪些资源是该资源加载过程中需要访问的资源,也即可以预测出客户端当前还未请求访问但很快就会请求访问的资源,从而利用下载当前请求访问的资源之外未占用的线程来下载预测出的资源,这样不仅可以使得资源加载过程中需要加载的资源下载速度加快,从而加快资源加载的速度并缩短加载延时,而且还使得下载线程得到了充分的利用。其中,由于资源加载过程中需要加载的资源彼此间具有依赖关系,因此,预测的方式,具体可以是通过预先依据完整客户端中资源之间依赖关系而生成的资源关系索引文件,查找与当前请求访问的当前资源具有依赖关系的资源作为预测资源。
需要说明的是,在本文中,术语“当前资源”、“预测资源”等表示的是客户端对资源需求的紧急程度。例如,“当前资源”表示的是客户端发起访问请求所针对的资源。又如,“预测资源”表示的是通过资源关系索引文件而查找出的与当前资源具有依赖关系的资源。
在介绍了本发明的基本原理之后,下面具体介绍本发明的各种非限制性实施方式。
应用场景总览
首先参考图1,图1是本发明的实施方式的一个示例性应用场景的框架示意图。其中,用户通过用户设备上的客户端102与提供网络应用服务的服务器101进行交互。本领域技术人员可以理解,图1所示的框架示意图仅是本发明的实施方式可以在其中得以实现的一个示例。本发明实施方式的适用范围不受到该框架任何方面的限制。
需要注意的是,此处的用户设备可以是现有的、正在研发的或将来研发的、能够通过任何形式的有线和/或无线连接(例如,Wi-Fi、LAN、蜂窝、同轴电缆等)实现其上客户端102与服务器101交互的任何用户设备,包括但不限于:现有的、正在研发的或将来研发的智能手机、非智能手机、平板电脑、膝上型个人计算机、桌面型个人计算机、小型计算机、中型计算机、大型计算机等。
还需要注意的是,此处的服务器101仅是现有的、正在研发的或将来研发的、能够向用户提供网络应用服务的设备的一个示例。本发明的实施方式在此方面不受任何限制。
基于图1所示的框架,客户端102可以先截获对当前资源的访问请求,再通过资源关系索引文件,查找与所述当前资源具有依赖关系且所述客户端本地不存在的资源作为预测资源,其中所述资源关系索引文件为预先依据网络应用的完整客户端中各个资源之间依赖关系而生成的、记录具有依赖关系的资源间对应关系的文件。然后,客户端102可以从可用于下载所述预测资源的未占用线程中分配出第一线程,并利用所述第一线程下载所述预测资源到所述客户端本地。
可以理解的是,本发明的应用场景中,虽然此处和下面将本发明实施方式的动作描述为由客户端102执行,但是这些动作也可以部分由客户端102执行、部分由服务器101执行,或者完全由服务器101执行。本发明在执行主体方面不受限制,只要执行了本发明实施方式所公开的动作即可。
示例性方法
下面结合图2~8的应用场景,参考图1来描述根据本发明示例性实施方式的用于资源下载的方法。需要注意的是,上述应用场景仅是为了便于理解本发明的精神和原理而示出,本发明的实施方式在此方面不受任何限制。相反,本发明的实施方式可以应用于适用的任何场景。
参见图2,示出了本发明中资源下载的方法一实施例的流程图。在本实施例中,例如具体可以包括如下步骤:
步骤201、截获对当前资源的访问请求。
在采用微端技术的客户端运行过程中,如果其发起访问请求,则可以截获该访问请求,从而确定该访问请求所针对的当前资源。可以理解的是,通过截获访问请求而确定当前资源,一方面可以是为了在当前资源不存在的情况下从服务器上下载当前资源到客户端本地,另一方面则可以是为了通过当前资源来预测客户端接下来将要访问的资源,从而实现预测资源在客户端请求访问之前的预先下载。
步骤202、通过资源关系索引文件,查找与所述当前资源具有依赖关系且所述客户端本地不存在的资源作为预测资源,其中所述资源关系索引文件为预先依据网络应用的完整客户端中各个资源之间依赖关系而生成的。
其中,资源关系索引文件中记录的可以是具有依赖关系的资源之间的对应关系,其可以是预先放置在作为微端的客户端中提供给用户设备下载,也可以是用户设备上的客户端在运行过程中从服务器上下载的。
可以理解的是,资源关系索引文件需要预先依据网络应用的完整客户端中各个资源之间依赖关系生成。
其中,资源之间具有依赖关系,可以是指为了实现一个资源加载过程而需要加载的资源。这些具有依赖关系的资源需要分多次访问,各个资源指示了在其访问之后需要访问的资源。也即,通过对各个资源进行解析,可以确定在其访问之后需要访问的是哪些资源。
而在本实施例中,可以预先通过对完整客户端的各个资源进行解析, 确定在资源加载过程中表示各个资源之间访问顺序的依赖关系,并依据此依赖关系而生成资源关系索引文件,而客户端在运行过程中,可以通过资源关系索引文件来查找出与当前资源具有依赖关系的资源,这些资源即是客户端访问当前资源之后可能将要访问的资源,因此,将这些查找出的资源作为预测资源并在访问当前资源的同时利用未占用线程去下载预测资源,就可以使得客户端在访问预测资源时无需再去下载,从而缩短了整个加载过程的加载延时。
例如,对于网络游戏中一个实体的加载过程,其实体一般由模型(model)组成,而模型一般是由顶点、贴图组成,有些模型还具有特效。对于网络游戏中的模型加载,图3示出了一种可能的资源间依赖关系示例的示意图。其中,model和visual是描述文件,这两者是用于标识和描述模型,在客户端引擎中通常用xml格式保存;fx是特效文件,primitives是顶点文件、bmp是贴图文件。可以理解的是,图3中的两个模型具有一个共用的贴图文件,这表示在完整客户端的资源中同一个贴图文件是可以被多个模型共用的。
以图3中的任意一个模型为例,其所用的资源可以看成是一颗树。网络游戏的客户端在加载这一模型时,可以从这棵树的根节点读起,每读一个节点就去解析该节点的文件,从而获取该节点的子节点信息,再去读入子节点,直到整棵树完全读入,这样就可以构建出该模型。例如,假设图3左边的模型为a1模型,其model文件为a1.model,其visual文件为a1.visual,其fx文件为flash.fx,其primitives文件为a1.primitives,其bmp文件为skin.bmp,则:
a1.model的内容可以为:
<root>
<visual>
a1
</visual>
</root>
a1.visual的内容可以为:
<root>
<fx>
flash
</fx>
<primitive>
al
</primitive>
<texture>
skin.bmp
</texture>
</root>
由此可见,与a1.model文件具有依赖关系的资源可以为a1.visual文件,以及可以还包括flash.fx、a1.primitives和skin.bmp文件。进一步而言,如果客户端发起访问请求所针对的当前资源是a1.model,那么通过资源关系索引文件查找出的预测资源可以包括a1.visual以及flash.fx、a1.primitives、skin.bmp。
步骤203、从可用于下载所述预测资源的未占用线程中分配出第一线程,并利用所述第一线程下载所述预测资源到所述客户端本地。
参考前述a1模型的示例,假设在客户端处于微端的情况下,a1模型的所有文件都在网络游戏的服务器上。此时,在对a1模型进行首次加载的过程中,如果采用现有技术,客户端仅下载当前发起访问的当前资源,那么a1模型的加载过程可以表示为:下载al.model→解析a1.model→下载al.visual→解析a1.visual→并行下载flash.fx、al.primitives和skin.bmp→加载完成;而在本实施例中,客户端在对当前资源发起访问的同时,除了下载作为当前资源的a1.model,还可以同时利用可用于下载预测资源未占用线程来下载作为预测资源的a1.visual、flash.fx、a1.primitives、skin.bmp,那么在可用线程数量理想的情况下,a1模型的加载过程可以表示为:下载 a1.model、a1.visual、flash.fx、a1.primitives、skin.bmp→加载文件。进一步考虑到客户端本地文件的加载及解析速度非常快使得本地文件的加载和解析所花费的时间可以忽略不计,则a1模型加载时主要的加载延时是由文件下载造成。假设每一次文件下载需要花费的时间为100ms,对于现有技术来说,由于其客户端仅下载当前发起访问的当前资源,其共需要经过三次下载(实际上总的耗时时间与资源树的层数有关),其a1模型的加载过程需要耗时300ms;对于本实施例来说,其客户端在发起对当前资源访问时可以下载预测资源,其共需要经过一次并行下载,其a1模型的加载过程需要耗时100ms。由此可见,本实施例相对于现有技术来说,可以大大缩短资源加载过程的时延。
需要说明的是,本实施例中用于下载预测资源的第一线程是从可用于下载该预测资源的未占用线程中分配出来的。由于通常用户在使用网络应用时,客户端加载资源的情况比较复杂,资源间依赖关系也比较复杂,而网络带宽往往是一定的,所以,因此,在本实施例的一些实施方式中,在客户端对当前资源发起访问时下载预测资源的基础上,还可以考虑需要下载的当前资源数量、预测资源数量、网络带宽的可用线程数量以及用户在网络游戏中的需求之间的关系,来确定用于下载预测资源的第一线程的分配方式。
在本实施例的一些实施方式中,考虑到客户端可能同时具有多个预测资源需要下载,而资源下载任务可以被认为是一种阻塞型任务,有时由于在先产生的资源下载任务占用了大量线程,使得可用于下载预测资源的未占用线程数量并不能满足在后产生的所有预测资源的下载任务需求,为此,可以建立一个仅用于存储未完成的预测资源下载任务的第一任务集合。在客户端加载资源的过程中,可以将所有预测资源的下载任务都加入该第一任务集合,然后利用可用于下载预测资源的未占用线程为该第一任务集合中的下载任务分配线程,分得线程的下载任务可以从该第一任务集合中取出,并利用分得的线程完成对该下载任务的预测资源的下载。具体地,步骤203例如可以包括:将下载所述预测资源的第一下载任务加入到 第一任务集合中;响应于所述第一下载任务分得所述第一线程,从所述第一任务集合中取出所述第一下载任务,并利用所述第一线程下载所述预测资源到所述客户端本地。其中,第一任务集合例如可以是一个任务队列。可以理解的是,通过将所有预测资源的下载任务加入第一任务集合,可以实现对预测资源下载任务的线程分配进行管理,从而避免可用于下载预测资源的未占用线程数量不够对预测资源的下载造成影响。
进一步而言,考虑到同一时刻需要下载的多个预测资源在接下来将要被加载的可能性并不相同(依赖关系越远则其在接下来将要被加载的可能性越小),有些在某一时刻加入到第一任务集合的预测资源下载任务,在其下一时刻还未分配到线程,客户端可能就暂时不需要访问该预测资源了,但此时第一任务集合又加入了新的预测资源下载任务,新加入下载任务的预测资源则是客户端接下来将要访问的。例如,在网络游戏的客户端运行过程中,用户的玩家角色快速通过第一区域,如果第一区域还未加载完毕玩家角色就已经移动到了第二区域,由于客户端此时需要加载的是第二区域的场景而暂时不需要再加载第一区域的场景,因此,相对于基于第一区域未分得线程的预测资源,客户端此时需要下载的是基于第二区域的预测资源。由此可见,相对于在先产生的预测资源的下载任务,在后产生的预测资源的下载任务是客户端更急需执行的,因此,在前述预测资源下载任务加入第一任务集合进行处理的基础上,还可以按照各个下载任务加入第一任务集合的时间由后到先的顺序为所述第一任务集合中的各个下载任务分配线程。具体地,步骤203例如可以包括:将下载所述预测资源的第一下载任务加入到第一任务集合中;按照第一任务集合的分配顺序,从可用于下载所述预测资源的未占用线程中为所述第一任务集合中的各个下载任务分配线程;响应于所述第一下载任务分得所述第一线程,从所述第一任务集合中取出所述第一下载任务,并利用所述第一线程下载所述预测资源到所述客户端本地。其中,所述第一任务集合的分配顺序为第一任务集合中的各个下载任务按照各自加入第一任务集合的时间由后到先排列所形成的顺序。此时,对于一个第一下载任务来说,在该第一下载任 务为最后一个加入所述第一任务集合的下载任务且当前存在可用于下载预测资源的未占用线程的情况下,该第一下载任务可以分得所述第一线程。也就是说,该第一任何集合的任务队列中的任务是后进先出(LIFO)的。
在本实施例的另一些实施方式中,考虑到有时客户端在为所有当前资源和所有预测资源分配了线程之后,还具有未占用线程,为了避免这一部分未占用线程的浪费,并且也为了更快地将完整客户端下载完毕,还可以响应于所述预测资源已分得第一线程且还存在可用于下载随机资源的未占用线程,随机选取所述客户端本地不存在的资源作为随机资源,并利用所述可用于下载随机资源的未占用线程下载所述随机资源。
在本实施例的又一些实施方式中,考虑到客户端可能同时在执行多个资源加载过程(如网络游戏的客户端在同时加载多个模型或实体),当网络带宽所提供的所有线程并不足以保证所有当前资源和所有预测资源都能够同时分得线程时,由于当前资源是客户端当前发起访问所请求的资源,是相对于预测资源来说客户端更急需的资源,因此,还可以优先为当前资源的下载任务分配线程,而预测资源可以是在当前资源分配线程之后再分配线程。对于这类实施方式,本发明将在后续实施例中介绍,在此不再赘述。
可以理解的是,考虑到有时在先分配的预测资源和随机资源可能会占用所有的线程,这会使得在后分配的当前资源难以及时获得线程来下载,从而造成当前资源加载的延时。为了避免为当前资源分配线程时因线程耗尽而产生延时,可以将可用于下载资源的线程分成两部分,一部分线程仅用于下载当前资源,另一部分线程由当前资源下载、预测资源下载和随机资源下载共用。具体地,所述客户端可用于下载资源的线程例如可以包括通用线程和专用线程,所述通用线程可用于下载所述当前资源、所述预测资源和所述随机资源,所述专用线程仅可用于下载所述当前资源。
通过本实施例的技术方案,由于与当前资源具有依赖关系的预测资源通常是当前资源访问之后就要访问的资源,一方面使得当前资源访问之后 需要访问且本地不存在的预测资源可以预先地在客户端发起对当前资源的访问请求时下载,而无需等到访问并解析当前资源之后客户端发起对预测资源的访问请求时再去下载,从而显著地减少了资源加载过程中客户端发起访问请求时需要下载资源的次数,加快了客户端资源首次加载的速度,并缩短了资源加载过程的加载延时,另一方面使得请求访问时当前资源未占用的线程可以被用来下载预测资源,从而避免了下载线程的浪费。
在客户端加载资源的过程中,往往当前资源与预测资源在客户端本地都不存在,这就使得在同一时刻客户端既需要下载当前资源也需要下载预测资源。如果此时网络带宽提供的线程不足以分配给所有的当前资源和预测资源,为了保证客户端能够尽快加载其当前发起访问请求的当前资源,可以使当前资源在预测资源之前分配线程。
具体地,参见图4,示出了本发明中资源下载的方法另一实施例的流程图,例如可以包括如下步骤:
步骤401、截获对当前资源的访问请求。
步骤402、通过资源关系索引文件,查找与所述当前资源具有依赖关系且所述客户端本地不存在的资源作为预测资源,其中所述资源关系索引文件为预先依据网络应用的完整客户端中各个资源之间依赖关系而生成的。
步骤403、响应于所述客户端本地不存在所述当前资源,从可用于下载所述当前资源的未占用线程中分配出第二线程,并利用所述第二线程下载所述当前资源到所述客户端本地。
其中,当前资源的下载可以不受其预测资源查找过程的影响。例如,在步骤401执行之后,可以无需等到步骤402查找出预测资源,而直接在客户端本地查找当前资源,如果能够查找到则在客户端本地读取当前资源,如果不能查找到则执行步骤403而实现当前资源的下载,也即,步骤403针对当前资源下载的执行可以与步骤402针对预测资源查找的执行同步进行。
需要说明的是,在本实施例的一些实施方式中,考虑到客户端可能同时具有多个模型需要加载,即客户端可能同时截获多个访问请求,使得其需要同时下载多个当前资源,而资源下载任务可以被认为是一种阻塞型任务,有时由于在先产生的资源下载任务占用了大量线程,使得可用于下载当前资源的未占用线程数量并不能满足在后产生的所有当前资源的下载任务需求,为此,可以建立一个仅用于存储未完成的当前资源下载任务的第二任务集合。在客户端加载资源的过程中,可以将所有当前资源的下载任务都加入该第二任务集合,然后利用可用于下载当前资源的未占用线程为该第二任务集合中的下载任务分配线程,分得线程的下载任务可以从该第二任务集合中取出,并利用分得的线程完成对该下载任务的当前资源的下载。具体地,步骤403例如可以包括:响应于所述客户端本地不存在所述当前资源,将下载所述当前资源的第二下载任务加入到第二任务集合中;响应于所述第二下载任务分得所述第二线程,从所述第二任务集合中取出所述第二下载任务,并利用所述第二线程下载所述当前资源到所述客户端本地。其中,第二任务集合例如可以是一个任务队列。可以理解的是,通过将所有当前资源的下载任务加入第二任务集合,可以实现对当前资源下载任务的线程分配进行管理,从而避免可用于下载当前资源的未占用线程数量不够对当前资源的下载造成影响。
进一步而言,考虑到当前资源是在客户端发起访问的资源,而客户端对于当前资源的加载顺序即是其发起访问的顺序,相对于在后产生的当前资源的下载任务,在先产生的当前资源的下载任务是客户端更急需执行的,因此,在前述当前资源下载任务加入第二任务集合进行处理的基础上,还可以按照各个下载任务加入第二任务集合的时间由先到后的顺序为所述第二任务集合中的各个下载任务分配线程。具体地,步骤403例如可以包括:响应于所述客户端本地不存在所述当前资源,将下载所述当前资源的第二下载任务加入到第二任务集合中;按照第二任务集合的分配顺序,从可用于下载所述当前资源的未占用线程中为所述第二任务集合中的各个下载任务分配线程;响应于所述第二下载任务分得所述第二线程,从所 述第二任务集合中取出所述第二下载任务,并利用所述第二线程下载所述当前资源到所述客户端本地。其中,所述第二任务集合的分配顺序为第二任务集合中的各个下载任务按照各自加入第二任务集合的时间由先到后排列所形成的顺序。此时,对于一个第二下载任务来说,在该第二下载任务为最先一个加入所述第二任务集合的下载任务且当前存在可用于下载当前资源的未占用线程的情况下,该第二下载任务可以分得所述第二线程。也就是说,该第二任务集合的任务队列中的任务是先进先出(FIFO)的。
步骤404、响应于所述当前资源已分得第二线程且还存在可用于下载所述预测资源的未占用线程,从可用于下载所述预测资源的未占用线程中分配出第一线程,并利用所述第一线程下载所述预测资源到所述客户端本地。
可以理解的是,由于当前资源是客户端发起访问而需要加载的资源,而预测资源仅是预测出客户端可能接下来会发起访问的资源,所以,相对于预测资源,当前资源是客户端更为急需的资源。因此,为了实现当前资源相对于预测资源的优先下载,可以先执行步骤403来分配用于下载当前资源的第二线程,而在所有当前资源都分配了线程、不再有当前资源未分得线程的情况下,如果还存在可用于下载预测资源的未占用线程,则可以执行步骤404来分配用于下载预测资源的第一线程。
在本实施例的一些实施方式中,基于前述第一任务集合和第二任务集合的实施方式,下载任务加入任务集合的过程与下载任务取出任务集合的过程可以是分开进行的。例如,在客户端发起访问请求时,如果基于该访问请求的当前资源和预测资源都不在客户端本地,则可以同时将当前资源的下载任务加入到第二任务集合而将预测资源的下载任务加入到第一任务集合,从而完成任务集合中下载任务的添加;而在具有可用于下载当前资源的未占用线程时,可以先为第二任务集合中的当前资源的下载任务分配线程,并从第二任务集合中取出分得线程的下载任务。当第二任务集合中不具有任何下载任务且还存在可用于下载预测资源的未占用线程时,可 以再为第一任务集合中的预测资源的下载任务分配线程,并从第一任务集合中取出分得线程的下载任务。更进一步地,当第一任务集合和第二任务集合中都不具有任何下载任务且还存在可用于下载随机资源的未占用线程时,还可以再随机选择一个客户端本地不存在的资源作为随机资源,并为随机资源的下载任务分配线程。
可以理解的是,预测资源的下载任务在加入第一任务集合之后,往往需要经过一定的时间才能分得线程,有时在这段时间内客户端会发起对该预测资源的访问请求,此时该预测资源就将作为当前资源,其下载任务也会加入第二任务集合,这就造成了第一任务集合和第二任务集合具有同一资源的下载任务。由于第二任务集合优先于第一任务集合分配线程,所以同一资源在两个任务集合的下载任务往往是第二任务集合先执行,此时,当其在第二任务集合的下载任务分得线程之后,其在第一任务集合的下载任务可以不再分配线程也不再执行。
此外,为了避免在先产生的预测资源和随机资源的下载任务占用线程而导致在后产生的当前资源的下载任务无法及时执行,可以令一部分线程仅分配给当前资源的下载任务,这部分线程即使在没有当前资源的下载任务需要分配的情况下也不会被分配给预测资源和随机资源的下载任务,从而保证后续产生当前资源的下载任务的能够及时得到线程。也就是说,如前所述,所述客户端可用于下载资源的线程例如可以包括通用线程和专用线程,所述通用线程可用于下载所述当前资源、所述预测资源和所述随机资源,所述专用线程仅可用于下载所述当前资源。
通过本实施例的技术方案,在预先下载客户端在访问当前资源之后接下来可能会访问的预测资源的基础上,可以使得客户端发起访问的当前资源的下载优先于客户端可能会访问的预测资源,从而保证了客户端能够及时加载其当前发起访问请求的当前资源,避免了同时下载当前资源与预测资源的情况下预测资源抢占当前资源的下载线程而导致的客户端加载时延增长。
为了使本领域技术人员更清楚地理解本发明用于资源下载的方法实施方式,下面以一个具体的应用场景进行示例性方法的介绍。在该应用场景中,如图5所示,对于客户端发起访问的当前资源,其下载任务会被加入高优先级队列(即前述第二任务集合的一种示例);对于查找出的预测资源,其下载任务会被加入低优先级队列(即前述第一任务集合的一种示例);在高、低优先级队列都无下载任务时,可以利用未占用线程下载随机资源。其中,高优先级队列采用FIFO,低优先级队列采用LIFO;线程池中的线程分为通用线程和专用线程,专用线程仅用于下载当前资源,通用线程用于下载当前资源、预测资源和随机资源。
具体地,参见图6,示出了本发明中资源下载的方法又一实施例的流程图。在本实施例中,例如可以包括如下步骤:
步骤601、截获对当前资源的访问请求。
步骤602、通过资源关系索引文件,查找与当前资源具有依赖关系且客户端本地不存在的资源作为预测资源。
步骤603、响应于客户端本地不存在当前资源,将当前资源的下载任务加入高优先级队列。
可以理解的是,当客户端本地存在当前资源时,则客户端可以直接从本地读取当前资源并加载,而无需再将当前资源的下载任务加入高优先级队列。
步骤604、将预测资源的下载任务加入低优先级队列。
可以理解的是,步骤601~604是针对一个访问请求的下载任务添加过程。在客户端实际运行过程中,针对每一个访问请求,客户端都可以执行一次步骤601~604。此外,如果客户端同时发起了多个访问请求,那么其也可以同时针对多个访问请求分别执行一次步骤601~604。
步骤605、识别高优先级队列和低优先级队列中的下载任务以及线程池中未占用的通用线程和专用线程。
需要说明的是,在步骤605执行完成之后,可以根据识别出的情况来选择进入执行步骤606、步骤607或步骤608。具体地,当高优先级队 列中具有下载任务且线程池中具有未占用的线程时,可以进入执行步骤606;当高优先级队列中不具有下载任务、低优先级队列中具有下载任务且线程池中具有未占用的通用线程时,可以进入执行步骤607;当高、低优先级队列中都不具有下载任务且线程池中具有未占用的通用线程,可以进入步骤608。
步骤606、响应于高优先级队列中具有下载任务且线程池中具有未占用的线程,从高优先级队列中取出最先一个加入的下载任务,为该下载任务分配线程并执行该下载任务。
其中,线程池中未占用的线程无论是通用线程还是专用线程,都可以用于分配给高优先级队列中的下载任务。可以理解的是,在下载任务完成之后,可以释放其所占用的线程,并将其下载所得的当前资源加入结果队列,以便于当前资源保存到客户端本地的相应存储位置。
步骤607、响应于高优先级队列中不具有下载任务、低优先级队列中具有下载任务且线程池中具有未占用的通用线程,从低优先级队列中取出最近加入的下载任务,为该下载任务分配线程并执行该下载任务。
其中,只有线程池中未占用的通用线程可以用于分配给低优先级队列中的下载任务。如果线程池中未占用线程仅有专用线程,则此时低优先级队列中的下载任务不能分得线程。可以理解的是,在下载任务完成之后,可以释放其所占用的线程,并将其下载所得的预测资源加入结果队列,以便于预测资源保存到客户端本地的相应存储位置。
步骤608、响应于高、低优先级队列中都不具有下载任务且线程池中具有未占用的通用线程,随机选取一个资源作为随机资源,为该随机资源的下载任务分配线程并执行该下载任务。
其中,只有线程池中未占用的通用线程可以用于分配给随机资源的下载任务。如果线程池中未占用线程仅有专用线程,则此时随机资源的下载任务不能分得线程。此外,随机选择的随机资源,例如可以是在客户端最后一次读取的资源包中包括的客户端本地还没有的资源中随机选取的。
可以理解的是,在下载任务完成之后,可以释放其所占用的线程, 并将其下载所得的随机资源加入结果队列,以便于随机资源保存到客户端本地的相应存储位置。
需要说明的是,步骤605~608是下载任务的线程分配及执行过程,随着高、低优先级队列中下载任务的情况以及线程池中线程的占用与释放情况不断变化,在客户端运行过程中需要不断地执行步骤605~608,直至完整的客户端下载完毕。
在本实施例中,步骤601~604执行的下载任务添加过程,步骤605~608执行的下载任务线程分配及执行过程,由于队列的引入,使得这两个过程在执行上可以是相互独立的。因此,步骤605可以不需要在步骤604执行完成时再去执行,而是可以在客户端运行过程中不断地执行。
通过本实施例的技术方案,可以实现利用未占用线程预先下载客户端在访问当前资源之后接下来可能会访问的预测资源,这一方面缩短了资源加载过程的加载延时,另一方面使得请求访问当前资源时未占用的线程可以被用来下载预测资源,从而避免了下载线程的浪费。在此基础上,还可以实现按照客户端对资源需求的紧急程度优先下载客户端急需的资源,从而避免非急需资源抢占急需资源的线程而导致客户端加载部分资源的延时增加的问题。
可以理解的是,许多网络应用会通过补丁的方式对其客户端进行程序与资源的更新。为了节省客户端的下载量,补丁文件中一般仅记录两个版本客户端之间差别的补丁数据。但对于采用微端技术的客户端来说,由于客户端在一段时间内是不完整的,因此,在客户端不完整的情况下,客户端往往还未下载补丁文件中的部分补丁数据所要修改的原始数据。为了使不完整的客户端能够适应原有补丁机制而无需对原有补丁机制进行改造,可以使不完整的客户端记录下补丁文件所要修改的客户端本地中未下载的原始数据,而等到客户端本地下载该原始数据之后再依据预先记录来应用补丁文件。
具体地,参见图7,示出了本发明中资源下载的方法再一实施例的 流程图。在本实施例中,例如可以包括如下步骤:
步骤701、下载所述客户端的补丁文件。
通常一个补丁文件中具有多个补丁数据,分别是用于对原有客户端做不同方式的更新。例如,有些补丁数据是用于修改(如可以包括替换或删除)原有客户端中的原始数据,有些补丁数据是用于在原有客户端基础上增加一段新数据。
步骤702、以所述补丁文件中所要修改的原始资源不存在于所述客户端本地的补丁数据作为待补丁数据,记录所述待补丁数据所要修改的原始资源。
具体地,客户端可以基于数据段对补丁文件所要更新的原始资源进行分析,选取其中客户端本地不存在且补丁文件要修改的原始资源,通过该原始资源所在位置的文件名、偏移和长度来记录该原始资源。当然,同时,还需要记录补丁文件中用于修改该原始资源的补丁数据,作为待补丁数据。
可以理解的是,有时对于某一客户端未下载的原始资源,在客户端已多次接收到对其进行修改的补丁文件,从而客户端就记录了多个要对该原始资源进行修改的待补丁数据。此时,在一些实施方式中,可以将同一原始资源的待补丁数据合并,再在客户端下载该原始资源之后,应用合并后的待补丁数据。其中,合并后的待补丁数据各个数据段保留的均是该数据段上最后接收到的补丁文件中的补丁数据。例如,参见图8所示的示例中,“Patch1”中的部分为在先接收到的一个补丁文件对某段原始资源的待补丁数据,“Patch2”中的部分为在后接收到的一个补丁文件对同一段原始文件的待补丁数据,合并后的待补丁数据则如“Patch合并”所示。
步骤703、响应于所述待补丁数据所要修改的原始资源下载到所述客户端本地,对所述客户端应用所述待补丁数据。
具体地,可以先依据预先记录的原始资源所在位置的文件名、偏移和长度确定客户端已下载待补丁数据所要修改的原始资源,然后再对客户 端应用该待补丁数据,使得原始资源被待补丁资源所修改。
需要说明的是,在补丁文件中,有些补丁数据是客户端可以在接收到补丁文件时直接应用的。在接收到补丁文件时,通过基于数据段对补丁文件所要更新的原始资源进行分析,例如在本实施例的一些实施方式中,还可以以所述补丁文件中所要修改的原始资源存在于所述客户端本地的补丁数据作为第一即时补丁数据,对所述客户端应用所述第一即时补丁数据。又如在本实施例的另一些实施方式中,还可以以所述补丁文件中用于为所述客户端增加资源的补丁数据作为第二即时补丁数据,对所述客户端应用所述第二即时补丁数据。再如在本实施例的又一些实施方式中,还可以以所述补丁文件中长度超过一个文件段的补丁数据为第三即时补丁数据,对所述客户端应用所述第三即时补丁数据。
另外,可以理解的是,本实施例中客户端对于补丁文件的应用方式,可以结合在前述任意一种客户端资源下载的实施方式上,本发明对此不做限定。
通过本实施例的技术方案,相对于文件或文件块整体替换的补丁方式,既不存在补丁文件过大而导致的补丁下载量过大问题,也不存在原始文件或文件块需要整体下载好而导致的准备补丁时间过长问题,甚至也无需对并非按照文件或文件块整体替换的原有补丁机制进行改造,使得采用微端技术的客户端具有及时且改造较小的补丁方式。
示例性设备
在介绍了本发明示例性实施方式的方法之后,接下来,参考图9~13对本发明示例性实施方式的、用于资源下载的设备进行介绍。
参见图9,示出了本发明中资源下载的设备一实施例的结构图。在本实施例中,所述设备例如具体可以包括:
访问截获模块901,用于截获对当前资源的访问请求;
预测资源查找模块902,用于通过资源关系索引文件,查找与所述当前资源具有依赖关系且所述客户端本地不存在的资源作为预测资源,其 中所述资源关系索引文件为预先依据网络应用的完整客户端中各个资源之间依赖关系而生成的;
第一下载模块903,用于从可用于下载所述预测资源的未占用线程中分配出第一线程,并利用所述第一线程下载所述预测资源到所述客户端本地。
其中,可选的,在本实施例的一些实施方式中,所述第一下载模块例如可以具体包括:
第一集合加入子模块,用于将下载所述预测资源的第一下载任务加入到第一任务集合中;
第一集合取出子模块,用于响应于所述第一下载任务分得所述第一线程,从所述第一任务集合中取出所述第一下载任务,并利用所述第一线程下载所述预测资源到所述客户端本地。
其中,进一步可选的,在本发明的另一些实施方式中,可以按照各个下载任务加入第一任务集合的时间由后到先的顺序为所述第一任务集合中的各个下载任务分配线程。
参见图10,示出了本发明中资源下载的设备另一实施例的结构图。在本实施例中,除了图9所示的所有结构外,所述设备例如具体还可以包括:
第二下载模块1001,用于响应于所述客户端本地不存在所述当前资源,从可用于下载所述当前资源的未占用线程中分配出第二线程,并利用所述第二线程下载所述当前资源到所述客户端本地;
第一触发模块1002,用于响应于所述当前资源已分得第二线程且还存在可用于下载所述预测资源的未占用线程,触发所述第一下载模块903。
其中,可选的,在本实施例的一些实施方式中,所述第二下载模块例如具体可以包括:
第二集合加入子模块,用于响应于所述客户端本地不存在所述当前资源,将下载所述当前资源的第二下载任务加入到第二任务集合中;
第二集合取出子模块,用于响应于所述第二下载任务分得所述第二 线程,从所述第二任务集合中取出所述第二下载任务,并利用所述第二线程下载所述当前资源到所述客户端本地。
其中,进一步可选的,在本实施例的另一些实施方式中,可以按照各个下载任务加入第二任务集合的时间由先到后的顺序为所述第二任务集合中的各个下载任务分配线程。
参见图11,示出了本发明中资源下载的设备又一实施例的结构图。在本实施例中,除了图9所示的所有结构外,所述设备例如具体还可以包括:
第三下载模块1101,用于响应于所述预测资源已分得第一线程且还存在可用于下载随机资源的未占用线程,随机选取所述客户端本地不存在的资源作为随机资源,并利用所述可用于随机资源的未占用线程下载所述随机资源。
其中,在本发明设备实施例的一些实施方式中,所述客户端可用于下载资源的线程可以包括通用线程和专用线程,所述通用线程可用于下载所述当前资源、所述预测资源和所述随机资源,所述专用线程仅可用于下载所述当前资源。
参见图12,示出了本发明中资源下载的设备再一实施例的结构图。在本实施例中,除了图9所示的所有结构外,所述设备例如具体还可以包括:
补丁下载模块1201,用于下载所述客户端的补丁文件;
补丁记录模块1202,用于以所述补丁文件中所要修改的原始资源不存在于所述客户端本地的补丁数据作为待补丁数据,记录所述待补丁数据所要修改的原始资源;
第一补丁应用模块1203,用于响应于所述待补丁数据所要修改的原始资源下载到所述客户端本地,对所述客户端应用所述待补丁数据。
参见图13,示出了本发明中资源下载的设备又再一实施例的结构图。在本实施例中,除了图12所示的所有结构外,所述设备例如具体还可以包括:
第二补丁应用模块1301,用于以所述补丁文件中所要修改的原始资源存在于所述客户端本地的补丁资源作为第一即时补丁数据,对所述客户端应用所述第一即时补丁数据;
第三补丁应用模块1302,用于以所述补丁文件中用于为所述客户端增加资源的补丁数据作为第二即时补丁数据,对所述客户端应用所述第二即时补丁数据;
第四补丁应用模块1303,用于以所述补丁文件中长度超过一个文件段的补丁数据为第三即时补丁数据,对所述客户端应用所述第三即时补丁数据。
通过本发明示例性的设备实施例,由于与当前资源具有依赖关系的预测资源通常是当前资源访问之后就要访问的资源,一方面使得当前资源访问之后需要访问且本地不存在的预测资源可以预先地在客户端发起对当前资源的访问请求时下载,而无需等到访问并解析当前资源之后客户端发起对预测资源的访问请求时再去下载,从而显著地减少了资源加载过程中客户端发起访问请求时需要下载资源的次数,加快了客户端资源首次加载的速度,并缩短了资源加载过程的加载延时,另一方面使得请求访问当前资源时未占用的线程可以被用来下载预测资源,从而避免了下载线程的浪费。
进一步地,在本发明设备实施例的一些实施方式中,相对于文件或文件块整体替换的补丁方式,既不存在补丁文件过大而导致的补丁下载量过大问题,也不存在原始文件或文件块需要整体下载好而导致的准备补丁时间过长问题,甚至也无需对并非按照文件或文件块整体替换的原有补丁机制进行改造,使得采用微端技术的客户端具有及时且改造较小的补丁方式。
应当注意,尽管在上文详细描述中提及了用于资源下载的设备的若干装置或子装置,但是这种划分仅仅是示例性的而并非是强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多模块的特征和功能可 以在一个模块中具体化。反之,上文描述的一个模块的特征和功能可以进一步划分为由多个模块来具体化。
此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。

一种资源下载的方法和设备.pdf_第1页
第1页 / 共26页
一种资源下载的方法和设备.pdf_第2页
第2页 / 共26页
一种资源下载的方法和设备.pdf_第3页
第3页 / 共26页
点击查看更多>>
资源描述

《一种资源下载的方法和设备.pdf》由会员分享,可在线阅读,更多相关《一种资源下载的方法和设备.pdf(26页珍藏版)》请在专利查询网上搜索。

1、(10)申请公布号 CN 103997544 A (43)申请公布日 2014.08.20 CN 103997544 A (21)申请号 201410260637.4 (22)申请日 2014.06.12 H04L 29/08(2006.01) H04L 29/06(2006.01) (71)申请人 网易 (杭州) 网络有限公司 地址 310052 浙江省杭州市滨江区长河街道 网商路 599 号 4 幢 7 层 (72)发明人 许飞 关子敬 (74)专利代理机构 北京信远达知识产权代理事 务所 ( 普通合伙 ) 11304 代理人 赵百令 刘大玲 (54) 发明名称 一种资源下载的方法和设备 。

2、(57) 摘要 本发明的实施方式提供了一种资源下载的方 法和设备。该方法包括 : 截获对当前资源的访问 请求 ; 通过资源关系索引文件, 查找与所述当前 资源具有依赖关系且所述客户端本地不存在的资 源作为预测资源, 其中所述资源关系索引文件为 预先依据网络应用的完整客户端中各个资源之间 依赖关系而生成的 ; 从可用于下载所述预测资源 的未占用线程中分配出第一线程, 并利用所述第 一线程下载所述预测资源到所述客户端本地。通 过利用未占用线程预先下载客户端在访问当前资 源之后接下来可能会访问的预测资源, 本发明的 方法不仅缩短了采用微端技术的客户端在资源加 载过程中的加载延时, 而且还避免了下载线。

3、程的 浪费。 此外, 本发明的实施方式提供了一种资源下 载的设备。 (51)Int.Cl. 权利要求书 3 页 说明书 16 页 附图 6 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书3页 说明书16页 附图6页 (10)申请公布号 CN 103997544 A CN 103997544 A 1/3 页 2 1. 一种方法, 包括 : A)、 截获对当前资源的访问请求 ; B)、 通过资源关系索引文件, 查找与所述当前资源具有依赖关系且所述客户端本地不 存在的资源作为预测资源, 其中所述资源关系索引文件为预先依据网络应用的完整客户端 中各个资源之间依赖关系而生成的。

4、 ; C)、 从可用于下载所述预测资源的未占用线程中分配出第一线程, 并利用所述第一线 程下载所述预测资源到所述客户端本地。 2. 根据权利要求 1 所述的方法, 其中, 所述步骤 C) 包括 : 将下载所述预测资源的第一下载任务加入到第一任务集合中 ; 响应于所述第一下载任务分得所述第一线程, 从所述第一任务集合中取出所述第一下 载任务, 并利用所述第一线程下载所述预测资源到所述客户端本地。 3. 根据权利要求 2 所述的方法, 其中, 按照各个下载任务加入第一任务集合的时间由 后到先的顺序为所述第一任务集合中的各个下载任务分配线程。 4. 根据权利要求 1 所述的方法, 还包括 : 响应于。

5、所述客户端本地不存在所述当前资源, 从可用于下载所述当前资源的未占用线 程中分配出第二线程, 并利用所述第二线程下载所述当前资源到所述客户端本地 ; 响应于所述当前资源已分得第二线程且还存在可用于下载所述预测资源的未占用线 程, 进入步骤 C)。 5. 根据权利要求 4 所述的方法, 所述响应于所述客户端本地不存在所述当前资源, 从 可用于下载所述当前资源的未占用线程中分配出第二线程, 并利用所述第二线程下载所述 当前资源到所述客户端本地, 包括 : 响应于所述客户端本地不存在所述当前资源, 将下载所述当前资源的第二下载任务加 入到第二任务集合中 ; 响应于所述第二下载任务分得所述第二线程, 。

6、从所述第二任务集合中取出所述第二下 载任务, 并利用所述第二线程下载所述当前资源到所述客户端本地。 6. 根据权利要求 5 所述的方法, 其中, 按照各个下载任务加入第二任务集合的时间由 先到后的顺序为所述第二任务集合中的各个下载任务分配线程。 7. 根据权利要求 1 所述的方法, 还包括 : 响应于所述预测资源已分得第一线程且还存在可用于下载随机资源的未占用线程, 随 机选取所述客户端本地不存在的资源作为随机资源, 并利用所述可用于下载随机资源的未 占用线程下载所述随机资源。 8.根据权利要求4或7所述的方法, 其中, 所述客户端可用于下载资源的线程包括通用 线程和专用线程, 所述通用线程可。

7、用于下载所述当前资源、 所述预测资源和所述随机资源, 所述专用线程仅可用于下载所述当前资源。 9. 根据权利要求 1 所述的方法, 还包括 : 下载所述客户端的补丁文件 ; 以所述补丁文件中所要修改的原始资源不存在于所述客户端本地的补丁数据作为待 补丁数据, 记录所述待补丁数据所要修改的原始资源 ; 响应于所述待补丁数据所要修改的原始资源下载到所述客户端本地, 对所述客户端应 权 利 要 求 书 CN 103997544 A 2 2/3 页 3 用所述待补丁数据。 10. 根据权利要求 9 所述的方法, 还包括 : 以所述补丁文件中所要修改的原始资源存在于所述客户端本地的补丁资源作为第一 即时。

8、补丁数据, 对所述客户端应用所述第一即时补丁数据 ; 以所述补丁文件中用于为所述客户端增加资源的补丁数据作为第二即时补丁数据, 对 所述客户端应用所述第二即时补丁数据 ; 以所述补丁文件中长度超过一个文件段的补丁数据为第三即时补丁数据, 对所述客户 端应用所述第三即时补丁数据。 11. 一种设备, 包括 : 访问截获模块, 用于截获对当前资源的访问请求 ; 预测资源查找模块, 用于通过资源关系索引文件, 查找与所述当前资源具有依赖关系 且所述客户端本地不存在的资源作为预测资源, 其中所述资源关系索引文件为预先依据网 络应用的完整客户端中各个资源之间依赖关系而生成的 ; 第一下载模块, 用于从可。

9、用于下载所述预测资源的未占用线程中分配出第一线程, 并 利用所述第一线程下载所述预测资源到所述客户端本地。 12. 根据权利要求 11 所述的设备, 其中, 所述第一下载模块包括 : 第一集合加入子模块, 用于将下载所述预测资源的第一下载任务加入到第一任务集合 中 ; 第一集合取出子模块, 用于响应于所述第一下载任务分得所述第一线程, 从所述第一 任务集合中取出所述第一下载任务, 并利用所述第一线程下载所述预测资源到所述客户端 本地。 13. 根据权利要求 12 所述的设备, 其中, 按照各个下载任务加入第一任务集合的时间 由后到先的顺序为所述第一任务集合中的各个下载任务分配线程。 14. 根。

10、据权利要求 11 所述的设备, 还包括 : 第二下载模块, 用于响应于所述客户端本地不存在所述当前资源, 从可用于下载所述 当前资源的未占用线程中分配出第二线程, 并利用所述第二线程下载所述当前资源到所述 客户端本地 ; 第一触发模块, 用于响应于所述当前资源已分得第二线程且还存在可用于下载所述预 测资源的未占用线程, 触发所述第一下载模块。 15. 根据权利要求 14 所述的设备, 其中, 所述第二下载模块包括 : 第二集合加入子模块, 用于响应于所述客户端本地不存在所述当前资源, 将下载所述 当前资源的第二下载任务加入到第二任务集合中 ; 第二集合取出子模块, 用于响应于所述第二下载任务分。

11、得所述第二线程, 从所述第二 任务集合中取出所述第二下载任务, 并利用所述第二线程下载所述当前资源到所述客户端 本地。 16. 根据权利要求 15 所述的设备, 其中, 按照各个下载任务加入第二任务集合的时间 由先到后的顺序为所述第二任务集合中的各个下载任务分配线程。 17. 根据权利要求 11 所述的设备, 还包括 : 第三下载模块, 用于响应于所述预测资源已分得第一线程且还存在可用于下载随机资 权 利 要 求 书 CN 103997544 A 3 3/3 页 4 源的未占用线程, 随机选取所述客户端本地不存在的资源作为随机资源, 并利用所述可用 于随机资源的未占用线程下载所述随机资源。 1。

12、8. 根据权利要求 14 或 17 所述的设备, 其中, 所述客户端可用于下载资源的线程包括 通用线程和专用线程, 所述通用线程可用于下载所述当前资源、 所述预测资源和所述随机 资源, 所述专用线程仅可用于下载所述当前资源。 19. 根据权利要求 11 所述的设备, 还包括 : 补丁下载模块, 用于下载所述客户端的补丁文件 ; 补丁记录模块, 用于以所述补丁文件中所要修改的原始资源不存在于所述客户端本地 的补丁数据作为待补丁数据, 记录所述待补丁数据所要修改的原始资源 ; 第一补丁应用模块, 用于响应于所述待补丁数据所要修改的原始资源下载到所述客户 端本地, 对所述客户端应用所述待补丁数据。 。

13、20. 根据权利要求 19 所述的设备, 还包括 : 第二补丁应用模块, 用于以所述补丁文件中所要修改的原始资源存在于所述客户端本 地的补丁资源作为第一即时补丁数据, 对所述客户端应用所述第一即时补丁数据 ; 第三补丁应用模块, 用于以所述补丁文件中用于为所述客户端增加资源的补丁数据作 为第二即时补丁数据, 对所述客户端应用所述第二即时补丁数据 ; 第四补丁应用模块, 用于以所述补丁文件中长度超过一个文件段的补丁数据为第三即 时补丁数据, 对所述客户端应用所述第三即时补丁数据。 权 利 要 求 书 CN 103997544 A 4 1/16 页 5 一种资源下载的方法和设备 技术领域 0001。

14、 本发明的实施方式涉及信息技术领域, 更具体地, 本发明的实施方式涉及一种资 源下载的方法和设备。 背景技术 0002 本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。 此处的 描述不因为包括在本部分中就承认是现有技术。 0003 许多网络应用都为其自身提供了用于安装在用户终端设备上的客户端程序 ( 简 称客户端 )。对于提供客户端的网络应用, 网络应用的客户端需要先被下载并安装到用户 终端设备上, 然后通过客户端与服务器之间的信息交互, 用户可以在客户端上实现对网络 应用的使用和体验。通过客户端向用户提供网络应用, 使得网络应用的一些数据可以随客 户端保存在用户终端设备本地,。

15、 从而避免用户每次使用网络应用时都从服务器下载全部数 据, 减少了用户使用网络应用时需要下载的数据以及网络应用使用过程中对网络资源的占 用。 0004 然而, 随着网络应用所涉及的数据量越来越大, 网络应用的客户端所包含资源的 数据量也越来越大, 导致用户下载客户端需要花费的时间也越来越长, 这不仅造成了用户 使用上的不便, 也使得许多网络应用的用户在客户端下载的过程中流失。为了节省用户下 载客户端需要花费的时间, 使得用户能够尽早进入网络应用的使用和体验而不至于网络应 用的用户流失, 一些现有的网络应用采用了微客户端 ( 简称微端 ) 技术。具体地说, 在微客 户端技术中, 提供给用户下载的。

16、客户端 ( 即微端 ) 仅包含网络应用最初使用时所必备的资 源, 而在客户端运行的过程中, 通过接管客户端的文件访问, 当发现客户端当前请求访问的 资源不存在于客户端本地时去服务器上下载该资源, 直至网络应用提供给用户的所有资源 都被下载到客户端本地, 从而在用户终端设备上形成完整的客户端。 通过微客户端技术, 用 户可以边使用网络应用边下载网络应用的资源, 而无需等到完整客户端下载完成再使用网 络应用, 从而减小了用户需要下载的客户端中初始资源的数据量, 节省了用户下载客户端 所花费的时间。 发明内容 0005 但是, 随着网络应用的资源间依赖关系越来越复杂, 客户端在某些资源加载过程 中需。

17、要访问的资源也越来越多。 此时, 对于本次资源加载过程中所需要的资源, 客户端在资 源加载过程中往往并不是一次性地去请求访问所有的资源, 而是分多次去分别请求访问一 部分资源。具体地, 在资源加载过程中, 客户端先发起对一部分资源的访问请求, 访问到这 部分资源时对这部分资源进行解析, 之后再发起对下一部分资源的访问请求, 直至本次资 源加载过程所需要的资源都被下载, 完成本次资源加载过程。例如, 对于三维 (3D) 网络游 戏来说, 相对于二维 (2D) 网络游戏, 客户端在对一个角色或场景进行加载时, 3D 游戏需要 加载的资源会比 2D 游戏多很多。同样是对一个角色或场景进行加载, 2D。

18、 游戏的客户端通 说 明 书 CN 103997544 A 5 2/16 页 6 常仅需要加载图片文件, 3D 游戏的客户端则需要先获得角色或场景的模型描述文件, 通过 解析描述文件查找到需要访问的贴图、 动画、 特效等文件, 再获得查找到的贴图、 动画、 特效 等文件, 从而完成角色或场景的加载。而且, 3D 游戏中角色或场景通常都比较复杂, 可能由 多部分相互依赖的资源组成, 每部分资源都要分别经过描述文件的下载、 解析以及贴图、 动 画、 特效等文件的下载。 0006 由此可见, 对于像 3D 网络游戏这样资源间存在复杂依赖关系的网络应用, 在资源 加载过程中需要经历的 “解析下载” 链。

19、条比较长, 而对于首次进行的资源加载过程, 由于 现有技术中采用微端技术的客户端仅下载当前请求访问且本地不存在的资源, 就使得客户 端在资源加载过程中需要按照 “解析下载” 链条反复多次去下载其请求访问的资源, 从而 导致资源加载过程的延时较长, 并且, 由于往往每次请求访问的资源都无法占用所有的下 载线程, 也造成了下载线程的浪费。 0007 因此在现有技术中, 在对彼此间存在复杂依赖关系的资源进行首次加载时, 采用 微端技术的网络应用客户端由于仅下载当前请求访问的资源, 既导致了客户端加载资源的 速度较慢, 造成加载延时较长, 也导致了下载线程的浪费, 这是非常令人烦恼的过程。 0008 。

20、为此, 非常需要一种改进的资源下载的方法和设备, 以避免现有技术中由于采用 微端技术的网络应用客户端仅下载当前请求访问的资源, 而导致的客户端加载资源速度较 慢、 加载延时较长以及浪费下载线程的缺陷。 0009 在本上下文中, 本发明的实施方式期望提供一种资源下载的方法和设备。 0010 在本发明实施方式的第一方面中, 提供了一种资源下载的方法, 包括 : 截获客户端 对当前资源的访问请求 ; 通过资源关系索引文件, 查找与所述当前资源具有依赖关系且所 述客户端本地不存在的资源作为预测资源, 其中所述资源关系索引文件为预先依据网络应 用的完整客户端中各个资源之间依赖关系而生成的 ; 从可用于下。

21、载所述预测资源的未占用 线程中分配出第一线程, 并利用所述第一线程下载所述预测资源到所述客户端本地。 0011 在本发明实施方式的第二方面中, 提供了一种资源下载的设备, 包括 : 访问截获模 块, 用于截获对当前资源的访问请求 ; 预测资源查找模块, 用于通过资源关系索引文件, 查 找与所述当前资源具有依赖关系且所述客户端本地不存在的资源作为预测资源, 其中所述 资源关系索引文件为预先依据网络应用的完整客户端中各个资源之间依赖关系而生成的 ; 第一下载模块, 用于从可用于下载所述预测资源的未占用线程中分配出第一线程, 并利用 所述第一线程下载所述预测资源到所述客户端本地。 0012 根据本发。

22、明实施方式用于资源下载的方法和设备, 对采用微端技术的客户端来 说, 在客户端发起对当前资源的访问时, 可以通过预先依据完整客户端中资源之间依赖关 系而生成的资源关系索引文件, 查找出与当前请求访问的当前资源具有依赖关系且客户端 本地不存在的资源作为预测资源, 并可以利用从可用于下载该预测资源的未占用线程中分 配出的第一线程来下载该预测资源到客户端本地。因此, 由于与当前资源具有依赖关系的 预测资源通常是当前资源访问之后就要访问的资源, 一方面使得当前资源访问之后需要访 问且本地不存在的预测资源可以预先地在客户端发起对当前资源的访问请求时下载, 而无 需等到访问并解析当前资源之后客户端发起对预。

23、测资源的访问请求时再去下载, 从而显著 地减少了资源加载过程中客户端下载资源的次数, 加快了客户端资源首次加载的速度, 并 缩短了资源加载过程的加载延时, 另一方面使得请求访问时当前资源未占用的线程可以被 说 明 书 CN 103997544 A 6 3/16 页 7 用来下载预测资源, 从而避免了下载线程的浪费。 附图说明 0013 通过参考附图阅读下文的详细描述, 本发明示例性实施方式的上述以及其他目 的、 特征和优点将变得易于理解。 在附图中, 以示例性而非限制性的方式示出了本发明的若 干实施方式, 其中 : 0014 图 1 示意性地示出了本发明的实施方式的一个示例性应用场景的框架示意。

24、图 ; 0015 图 2 示意性地示出了本发明中资源下载的方法一实施例的流程图 ; 0016 图 3 示意性地示出了本发明实施例中资源间依赖关系示例的示意图 ; 0017 图 4 示意性地示出了本发明中资源下载的方法另一实施例的流程图 ; 0018 图 5 示意性地示出了本发明实施例中一个具体应用场景示例下的下载任务一处 理方式的示意图 ; 0019 图 6 示意性地示出了本发明中资源下载的方法又一实施例的流程图 ; 0020 图 7 示意性地示出了本发明中资源下载的方法再一实施例的流程图 ; 0021 图 8 示意性地示出了本发明实施例中待补丁数据合并一实施方式的实例示意图 ; 0022 图。

25、 9 示意性地示出了本发明中资源下载的设备一实施例的结构图 ; 0023 图 10 示意性地示出了本发明中资源下载的设备另一实施例的结构图 ; 0024 图 11 示意性地示出了本发明中资源下载的设备又一实施例的结构图 ; 0025 图 12 示意性地示出了本发明中资源下载的设备再一实施例的结构图 ; 0026 图 13 示意性地示出了本发明中资源下载的设备又再一实施例的结构图 ; 0027 在附图中, 相同或对应的标号表示相同或对应的部分。 具体实施方式 0028 下面将参考若干示例性实施方式来描述本发明的原理和精神。应当理解, 给出这 些实施方式仅仅是为了使本领域技术人员能够更好地理解进而。

26、实现本发明, 而并非以任何 方式限制本发明的范围。 相反, 提供这些实施方式是为了使本公开更加透彻和完整, 并且能 够将本公开的范围完整地传达给本领域的技术人员。 0029 本领域技术人员知道, 本发明的实施方式可以实现为一种系统、 装置、 设备、 方法 或计算机程序产品。因此, 本公开可以具体实现为以下形式, 即 : 完全的硬件、 完全的软件 ( 包括固件、 驻留软件、 微代码等 ), 或者硬件和软件结合的形式。 0030 根据本发明的实施方式, 提出了一种资源下载的方法和设备。 0031 在本文中, 需要理解的是, 所涉及的术语 “微端” 表示的是网络应用开发商提供的、 用于安装在用户设备。

27、上的客户端程序, 其在运行的过程中, 可以在发起访问请求时判断请 求访问的当前资源是否存在于其客户端本地, 从而将不在本地的当前资源从服务器下载到 本地。其中, 所提及的 “资源” 表示的是网络应用在其客户端程序中所具有的各种文件和数 据, 一个 “资源” 既可以对应一个文件, 也可以对应多个文件, 本文对此并不限定。此外, 附 图中的任何元素数量均用于示例而非限制, 以及任何命名都仅用于区分, 而不具有任何限 制含义。 0032 下面参考本发明的若干代表性实施方式, 详细阐释本发明的原理和精神。 说 明 书 CN 103997544 A 7 4/16 页 8 0033 发明概述 0034 本。

28、发明人发现, 现有的微端技术中, 客户端在发起访问请求时仅是去下载当前请 求访问的资源, 因此, 如果一个首次进行的资源加载过程中需要加载的资源彼此间具有复 杂依赖关系, 客户端就需要按照访问的顺序反复多次去下载, 每一次下载的仅是客户端当 前请求访问的资源, 而往往下载客户端当前请求访问的资源并不会占用所有的线程, 这就 导致资源加载过程中无法同时利用所有的线程下载需要加载的资源, 从而不仅使得客户端 加载资源的速度较慢、 加载延时较长, 还造成了下载线程的浪费。 0035 基于上述分析, 本发明的基本思想在于 : 为了使得资源加载过程中可以尽可能同 时利用更多的线程来下载资源, 而不是仅下。

29、载客户端当前请求访问的资源, 可以预先地确 定出哪些资源是该资源加载过程中需要访问的资源, 也即可以预测出客户端当前还未请求 访问但很快就会请求访问的资源, 从而利用下载当前请求访问的资源之外未占用的线程来 下载预测出的资源, 这样不仅可以使得资源加载过程中需要加载的资源下载速度加快, 从 而加快资源加载的速度并缩短加载延时, 而且还使得下载线程得到了充分的利用。 其中, 由 于资源加载过程中需要加载的资源彼此间具有依赖关系, 因此, 预测的方式, 具体可以是通 过预先依据完整客户端中资源之间依赖关系而生成的资源关系索引文件, 查找与当前请求 访问的当前资源具有依赖关系的资源作为预测资源。 0。

30、036 需要说明的是, 在本文中, 术语 “当前资源” 、“预测资源” 等表示的是客户端对资源 需求的紧急程度。例如,“当前资源” 表示的是客户端发起访问请求所针对的资源。又如, “预测资源” 表示的是通过资源关系索引文件而查找出的与当前资源具有依赖关系的资源。 0037 在介绍了本发明的基本原理之后, 下面具体介绍本发明的各种非限制性实施方 式。 0038 应用场景总览 0039 首先参考图1, 图1是本发明的实施方式的一个示例性应用场景的框架示意图。 其 中, 用户通过用户设备上的客户端 102 与提供网络应用服务的服务器 101 进行交互。本领 域技术人员可以理解, 图 1 所示的框架示。

31、意图仅是本发明的实施方式可以在其中得以实现 的一个示例。本发明实施方式的适用范围不受到该框架任何方面的限制。 0040 需要注意的是, 此处的用户设备可以是现有的、 正在研发的或将来研发的、 能够通 过任何形式的有线和 / 或无线连接 ( 例如, Wi-Fi、 LAN、 蜂窝、 同轴电缆等 ) 实现其上客户 端 102 与服务器 101 交互的任何用户设备, 包括但不限于 : 现有的、 正在研发的或将来研发 的智能手机、 非智能手机、 平板电脑、 膝上型个人计算机、 桌面型个人计算机、 小型计算机、 中型计算机、 大型计算机等。 0041 还需要注意的是, 此处的服务器 101 仅是现有的、 。

32、正在研发的或将来研发的、 能够 向用户提供网络应用服务的设备的一个示例。本发明的实施方式在此方面不受任何限制。 0042 基于图1所示的框架, 客户端102可以先截获对当前资源的访问请求, 再通过资源 关系索引文件, 查找与所述当前资源具有依赖关系且所述客户端本地不存在的资源作为预 测资源, 其中所述资源关系索引文件为预先依据网络应用的完整客户端中各个资源之间依 赖关系而生成的、 记录具有依赖关系的资源间对应关系的文件。然后, 客户端 102 可以从可 用于下载所述预测资源的未占用线程中分配出第一线程, 并利用所述第一线程下载所述预 测资源到所述客户端本地。 说 明 书 CN 10399754。

33、4 A 8 5/16 页 9 0043 可以理解的是, 本发明的应用场景中, 虽然此处和下面将本发明实施方式的动作 描述为由客户端 102 执行, 但是这些动作也可以部分由客户端 102 执行、 部分由服务器 101 执行, 或者完全由服务器 101 执行。本发明在执行主体方面不受限制, 只要执行了本发明实 施方式所公开的动作即可。 0044 示例性方法 0045 下面结合图 2 8 的应用场景, 参考图 1 来描述根据本发明示例性实施方式的用 于资源下载的方法。需要注意的是, 上述应用场景仅是为了便于理解本发明的精神和原理 而示出, 本发明的实施方式在此方面不受任何限制。 相反, 本发明的实。

34、施方式可以应用于适 用的任何场景。 0046 参见图 2, 示出了本发明中资源下载的方法一实施例的流程图。在本实施例中, 例 如具体可以包括如下步骤 : 0047 步骤 201、 截获对当前资源的访问请求。 0048 在采用微端技术的客户端运行过程中, 如果其发起访问请求, 则可以截获该访问 请求, 从而确定该访问请求所针对的当前资源。 可以理解的是, 通过截获访问请求而确定当 前资源, 一方面可以是为了在当前资源不存在的情况下从服务器上下载当前资源到客户端 本地, 另一方面则可以是为了通过当前资源来预测客户端接下来将要访问的资源, 从而实 现预测资源在客户端请求访问之前的预先下载。 0049。

35、 步骤 202、 通过资源关系索引文件, 查找与所述当前资源具有依赖关系且所述客户 端本地不存在的资源作为预测资源, 其中所述资源关系索引文件为预先依据网络应用的完 整客户端中各个资源之间依赖关系而生成的。 0050 其中, 资源关系索引文件中记录的可以是具有依赖关系的资源之间的对应关系, 其可以是预先放置在作为微端的客户端中提供给用户设备下载, 也可以是用户设备上的客 户端在运行过程中从服务器上下载的。 0051 可以理解的是, 资源关系索引文件需要预先依据网络应用的完整客户端中各个资 源之间依赖关系生成。 0052 其中, 资源之间具有依赖关系, 可以是指为了实现一个资源加载过程而需要加载。

36、 的资源。这些具有依赖关系的资源需要分多次访问, 各个资源指示了在其访问之后需要访 问的资源。也即, 通过对各个资源进行解析, 可以确定在其访问之后需要访问的是哪些资 源。 0053 而在本实施例中, 可以预先通过对完整客户端的各个资源进行解析, 确定在资源 加载过程中表示各个资源之间访问顺序的依赖关系, 并依据此依赖关系而生成资源关系索 引文件, 而客户端在运行过程中, 可以通过资源关系索引文件来查找出与当前资源具有依 赖关系的资源, 这些资源即是客户端访问当前资源之后可能将要访问的资源, 因此, 将这些 查找出的资源作为预测资源并在访问当前资源的同时利用未占用线程去下载预测资源, 就 可以。

37、使得客户端在访问预测资源时无需再去下载, 从而缩短了整个加载过程的加载延时。 0054 例如, 对于网络游戏中一个实体的加载过程, 其实体一般由模型 (model) 组成, 而 模型一般是由顶点、 贴图组成, 有些模型还具有特效。对于网络游戏中的模型加载, 图 3 示 出了一种可能的资源间依赖关系示例的示意图。 其中, model和visual是描述文件, 这两者 是用于标识和描述模型, 在客户端引擎中通常用 xml 格式保存 ; fx 是特效文件, primitives 说 明 书 CN 103997544 A 9 6/16 页 10 是顶点文件、 bmp是贴图文件。 可以理解的是, 图3中。

38、的两个模型具有一个共用的贴图文件, 这表示在完整客户端的资源中同一个贴图文件是可以被多个模型共用的。 0055 以图 3 中的任意一个模型为例, 其所用的资源可以看成是一颗树。网络游戏的客 户端在加载这一模型时, 可以从这棵树的根节点读起, 每读一个节点就去解析该节点的文 件, 从而获取该节点的子节点信息, 再去读入子节点, 直到整棵树完全读入, 这样就可以构 建出该模型。例如, 假设图 3 左边的模型为 a1 模型, 其 model 文件为 a1.model, 其 visual 文件为a1.visual, 其fx文件为flash.fx, 其primitives文件为a1.primitives。

39、, 其bmp文 件为 skin.bmp, 则 : 0056 a1.model 的内容可以为 : 0057 0058 0059 a1 0060 0061 0062 a1.visual 的内容可以为 : 0063 0064 0065 flash 0066 0067 0068 al 0069 0070 0071 skin.bmp 0072 0073 0074 由此可见, 与 a1.model 文件具有依赖关系的资源可以为 a1.visual 文件, 以及可 以还包括 flash.fx、 a1.primitives 和 skin.bmp 文件。进一步而言, 如果客户端发起访问 请求所针对的当前资源是 。

40、a1.model, 那么通过资源关系索引文件查找出的预测资源可以包 括 a1.visual 以及 flash.fx、 a1.primitives、 skin.bmp。 0075 步骤 203、 从可用于下载所述预测资源的未占用线程中分配出第一线程, 并利用所 述第一线程下载所述预测资源到所述客户端本地。 0076 参考前述 a1 模型的示例, 假设在客户端处于微端的情况下, a1 模型的所有文件 都在网络游戏的服务器上。此时, 在对 a1 模型进行首次加载的过程中, 如果采用现有技 术, 客户端仅下载当前发起访问的当前资源, 那么 a1 模型的加载过程可以表示为 : 下载 al.model 解。

41、析 a1.model 下载 al.visual 解析 a1.visual 并行下载 flash.fx、 al.primitives 和 skin.bmp 加载完成 ; 而在本实施例中, 客户端在对当前资源发起访问 的同时, 除了下载作为当前资源的 a1.model, 还可以同时利用可用于下载预测资源未占用 线程来下载作为预测资源的 a1.visual、 flash.fx、 a1.primitives、 skin.bmp, 那么在可 说 明 书 CN 103997544 A 10 7/16 页 11 用线程数量理想的情况下, a1 模型的加载过程可以表示为 : 下载 a1.model、 a1.v。

42、isual、 flash.fx、 a1.primitives、 skin.bmp 加载文件。进一步考虑到客户端本地文件的加载及 解析速度非常快使得本地文件的加载和解析所花费的时间可以忽略不计, 则 a1 模型加载 时主要的加载延时是由文件下载造成。假设每一次文件下载需要花费的时间为 100ms, 对 于现有技术来说, 由于其客户端仅下载当前发起访问的当前资源, 其共需要经过三次下载 ( 实际上总的耗时时间与资源树的层数有关 ), 其 a1 模型的加载过程需要耗时 300ms ; 对于 本实施例来说, 其客户端在发起对当前资源访问时可以下载预测资源, 其共需要经过一次 并行下载, 其 a1 模型。

43、的加载过程需要耗时 100ms。由此可见, 本实施例相对于现有技术来 说, 可以大大缩短资源加载过程的时延。 0077 需要说明的是, 本实施例中用于下载预测资源的第一线程是从可用于下载该预测 资源的未占用线程中分配出来的。由于通常用户在使用网络应用时, 客户端加载资源的情 况比较复杂, 资源间依赖关系也比较复杂, 而网络带宽往往是一定的, 所以, 因此, 在本实施 例的一些实施方式中, 在客户端对当前资源发起访问时下载预测资源的基础上, 还可以考 虑需要下载的当前资源数量、 预测资源数量、 网络带宽的可用线程数量以及用户在网络游 戏中的需求之间的关系, 来确定用于下载预测资源的第一线程的分配。

44、方式。 0078 在本实施例的一些实施方式中, 考虑到客户端可能同时具有多个预测资源需要下 载, 而资源下载任务可以被认为是一种阻塞型任务, 有时由于在先产生的资源下载任务占 用了大量线程, 使得可用于下载预测资源的未占用线程数量并不能满足在后产生的所有预 测资源的下载任务需求, 为此, 可以建立一个仅用于存储未完成的预测资源下载任务的第 一任务集合。在客户端加载资源的过程中, 可以将所有预测资源的下载任务都加入该第一 任务集合, 然后利用可用于下载预测资源的未占用线程为该第一任务集合中的下载任务分 配线程, 分得线程的下载任务可以从该第一任务集合中取出, 并利用分得的线程完成对该 下载任务的。

45、预测资源的下载。 具体地, 步骤203例如可以包括 : 将下载所述预测资源的第一 下载任务加入到第一任务集合中 ; 响应于所述第一下载任务分得所述第一线程, 从所述第 一任务集合中取出所述第一下载任务, 并利用所述第一线程下载所述预测资源到所述客户 端本地。其中, 第一任务集合例如可以是一个任务队列。可以理解的是, 通过将所有预测资 源的下载任务加入第一任务集合, 可以实现对预测资源下载任务的线程分配进行管理, 从 而避免可用于下载预测资源的未占用线程数量不够对预测资源的下载造成影响。 0079 进一步而言, 考虑到同一时刻需要下载的多个预测资源在接下来将要被加载的可 能性并不相同 ( 依赖关。

46、系越远则其在接下来将要被加载的可能性越小 ), 有些在某一时刻 加入到第一任务集合的预测资源下载任务, 在其下一时刻还未分配到线程, 客户端可能就 暂时不需要访问该预测资源了, 但此时第一任务集合又加入了新的预测资源下载任务, 新 加入下载任务的预测资源则是客户端接下来将要访问的。例如, 在网络游戏的客户端运行 过程中, 用户的玩家角色快速通过第一区域, 如果第一区域还未加载完毕玩家角色就已经 移动到了第二区域, 由于客户端此时需要加载的是第二区域的场景而暂时不需要再加载第 一区域的场景, 因此, 相对于基于第一区域未分得线程的预测资源, 客户端此时需要下载的 是基于第二区域的预测资源。 由此。

47、可见, 相对于在先产生的预测资源的下载任务, 在后产生 的预测资源的下载任务是客户端更急需执行的, 因此, 在前述预测资源下载任务加入第一 任务集合进行处理的基础上, 还可以按照各个下载任务加入第一任务集合的时间由后到先 说 明 书 CN 103997544 A 11 8/16 页 12 的顺序为所述第一任务集合中的各个下载任务分配线程。具体地, 步骤 203 例如可以包括 : 将下载所述预测资源的第一下载任务加入到第一任务集合中 ; 按照第一任务集合的分配顺 序, 从可用于下载所述预测资源的未占用线程中为所述第一任务集合中的各个下载任务分 配线程 ; 响应于所述第一下载任务分得所述第一线程,。

48、 从所述第一任务集合中取出所述第 一下载任务, 并利用所述第一线程下载所述预测资源到所述客户端本地。 其中, 所述第一任 务集合的分配顺序为第一任务集合中的各个下载任务按照各自加入第一任务集合的时间 由后到先排列所形成的顺序。 此时, 对于一个第一下载任务来说, 在该第一下载任务为最后 一个加入所述第一任务集合的下载任务且当前存在可用于下载预测资源的未占用线程的 情况下, 该第一下载任务可以分得所述第一线程。 也就是说, 该第一任何集合的任务队列中 的任务是后进先出 (LIFO) 的。 0080 在本实施例的另一些实施方式中, 考虑到有时客户端在为所有当前资源和所有预 测资源分配了线程之后, 。

49、还具有未占用线程, 为了避免这一部分未占用线程的浪费, 并且也 为了更快地将完整客户端下载完毕, 还可以响应于所述预测资源已分得第一线程且还存在 可用于下载随机资源的未占用线程, 随机选取所述客户端本地不存在的资源作为随机资 源, 并利用所述可用于下载随机资源的未占用线程下载所述随机资源。 0081 在本实施例的又一些实施方式中, 考虑到客户端可能同时在执行多个资源加载过 程 ( 如网络游戏的客户端在同时加载多个模型或实体 ), 当网络带宽所提供的所有线程并 不足以保证所有当前资源和所有预测资源都能够同时分得线程时, 由于当前资源是客户端 当前发起访问所请求的资源, 是相对于预测资源来说客户端更急需的资源, 因此, 还可以优 先为当前资源的下载任务分配线程, 而预测资源可以是在当前资源分配线程之后再分配线 程。对于这类实施方式, 本发明将在后续实施例中介绍, 在此不再赘述。 0082 可以理解的是, 考虑到有时在先分配的预测资源和随机资源可。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 电学 > 电通信技术


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1