一种热更新方法和装置制造方法及图纸

技术编号:10316169 阅读:152 留言:0更新日期:2014-08-13 17:36
本发明专利技术的实施方式提供了一种热更新方法和装置。例如,该方法可以包括:响应于运行中的程序接收到热更新指令,获取更新程序集以及用于描述更新程序集与程序已有程序集区别的差异描述,其中,更新程序集与已有程序集中相同的元数据具有相同的标识;将更新程序集载入内存,以及根据差异描述,在更新程序集中查找出相对于已有程序集修改过的函数;对查找出的修改过的函数进行即时编译得到更新本机代码;在修改过的函数对应的已有本机代码需要被运行时,以更新本机代码代替已有本机代码运行。由于更新程序集与已有程序集相同的元数据具有相同的标识,更新后已有对象仍然可用,对程序设计没有特殊要求。此外,本发明专利技术的实施方式提供了一种热更新装置。

【技术实现步骤摘要】
一种热更新方法和装置
本专利技术的实施方式涉及计算机应用领域,更具体地,本专利技术的实施方式涉及一种热更新方法和装置。
技术介绍
本部分旨在为权利要求书中陈述的本专利技术的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。对于通过互联网提供服务的系统来说,当系统运行期间发现急需改正的问题时,需要及时修复以保证服务质量。为了使用户有更好的体验,一般采取在线热更新的方式修复问题。目前,热更新普遍的做法是,在系统开发时,将方法(包含一系列语句的代码块)模块化,将各个模块设计成单独的DLL(DynamicLinkLibrary,动态链接库),其中,要求各个模块不能通过变量记录运行状态,否则一旦卸载原有的DLL将导致变量所记录的运行状态丢;要求类定义与方法定义分离,否则将导致原有模块中的类定义所产生的对象在原有的DLL卸载后不可用。这样,通过上述做法实现的系统可以通过动态卸载原有的DLL加载更新的DLL实现热更新。
技术实现思路
但是,由于现有技术动态卸/加载DLL的方式热更新,对系统程序设计提出了特定要求,因此在现有技术中,如何热更新仍然是非常令人烦恼的问题。为此,非常需要一种改进的热更新方法,以实现对系统程序设计不存在特定要求的目的。在本上下文中,本专利技术的实施方式期望提供一种热更新方法及装置。在本专利技术实施方式的第一方面中,提供了一种热更新方法,例如,该方法包括:响应于运行中的程序接收到热更新指令,获取更新程序集以及用于描述更新程序集与所述程序已有程序集区别的差异描述,其中,所述更新程序集与所述已有程序集中相同的元数据具有相同的标识;将所述更新程序集载入内存,以及根据所述差异描述,在所述更新程序集中查找出相对于已有程序集修改过的函数;对查找出的修改过的函数进行即时编译,得到更新本机代码;在所述修改过的函数对应的已有本机代码需要被运行时,以所述更新本机代码代替所述已有本机代码运行。在本专利技术实施方式的第二方面中,提供了一种热更新装置,例如,该装置可以包括:接收单元,可以配置用于响应于运行中的程序接收到热更新指令,获取更新程序集以及用于描述更新程序集与所述程序已有程序集区别的差异描述,其中,所述更新程序集与所述已有程序集中相同的元数据具有相同的标识;修改确定单元,可以配置用于将所述更新程序集载入内存,以及根据所述差异描述,在所述更新程序集中查找出相对于已有程序集修改过的函数;即时编译单元,可以配置用于对查找出的修改过的函数进行即时编译,得到更新本机代码;运行单元,可以配置用于在所述修改过的函数对应的已有本机代码需要被运行时,以所述更新本机代码代替所述已有本机代码运行。根据本专利技术实施方式的热更新方法和装置,由于更新程序集与程序已有程序集相同的元数据具有相同的标识,更新程序集中相对于系统已有程序集修改过的函数进行即时编译得到的更新本机代码仍然可以使用已有对象,因此,本专利技术方法以更新本机代码代替修改过的函数对应的已有本机代码运行就可以使程序在运行过程中被更新,对程序的源代码设计没有特定要求。附图说明通过参考附图阅读下文的详细描述,本专利技术示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本专利技术的若干实施方式,其中:图1示意性地示出了根据本专利技术实施方式的热更新方法流程示意图;图2示意性地示出了根据本专利技术一实施例的差异描述文件示意图;图3示意性地示出了根据本专利技术实施方式的热更新装置结构示意图;在附图中,相同或对应的标号表示相同或对应的部分。具体实施方式下面将参考若干示例性实施方式来描述本专利技术的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本专利技术,而并非以任何方式限制本专利技术的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。本领域技术人员知道,本专利技术的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。根据本专利技术的实施方式,提出了一种热更新方法和装置。在本文中,需要理解的是,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。下面参考本专利技术的若干代表性实施方式,详细阐释本专利技术的原理和精神。专利技术概述元数据是存储在程序集中用于描述程序(如类型和方法或称函数)的数据。运行时库通过元数据的标识来引用元数据以发现类、成员、继承等信息。本专利技术人发现,对于根据更新需求修改源代码编译得到的更新程序集来说,如果更新程序集与系统已有程序集相同的元数据具有相同的标识(或称,具有相同的编号),那么已有对象仍然有效,所以更新程序集中相对于系统已有程序集修改过的函数进行即时编译得到的更新本机代码仍然可以使用已有对象,系统运行中记录动态的数据不会丢失,因此,以更新本机代码代替修改过的函数对应的已有本机代码运行就可以使系统在运行过程中被更新,对系统程序的源代码设计没有特定要求。在介绍了本专利技术的基本原理之后,下面具体介绍本专利技术的各种非限制性实施方式。应用场景总览例如,本专利技术示例性实施方式的热更新方法可以应用于对大型网络游戏系统(包括服务器端和/或客户端)的在线更新。示例性方法下面结合上述应用场景,参考图1来描述根据本专利技术示例性实施方式的热更新方法。需要注意的是,上述应用场景仅是为了便于理解本专利技术的精神和原理而示出,本专利技术的实施方式在此方面不受任何限制。相反,本专利技术的实施方式可以应用于适用的任何场景。例如,参见图1,为本专利技术实施例提供的热更新方法流程示意图。如图所示,本专利技术实施例一种可能的实施方式可以包括:S110、响应于运行中的程序接收到热更新指令,获取更新程序集以及用于描述更新程序集与所述程序已有程序集区别的差异描述,其中,所述更新程序集与所述已有程序集中相同的元数据具有相同的标识。其中,在运行中的程序接收到热更新指令之前,还可以对根据热更新需求修改的源代码进行编译,生成更新程序集;对所述更新程序集进行结构调整,使调整后的更新程序集与所述程序的已有程序集中相同的元数据具有相同的标识;将所述更新程序集与所述已有程序集进行比较,生成差异描述文件,其中,所述差异描述文件包含用于描述更新程序集与已有程序集区别的差异描述;向所述运行中的程序发送热更新指令,以使所述运行中的程序从所述差异描述文件中获取所述差异描述。例如,可以向运行中的程序发送热更新指令以及差异描述文件,在运行中的程序对差异描述文件进行解析确定差异描述文件对应的热更新程序集之后,运行中的程序相应调用运行环境提供的热更新接口,进而在运行环境(例如,Mono,跨平台的.NET运行环境)层面读取该更新程序集并执行后续热更新操作。为了减少需要传输的数据量,例如,可以利用用于比较二进制文件差异的xdelta工具比较更新程序集与已有程序集(其中,更新程序集与已有程序集相同元数据具有相同标识),生成仅包含更新程序集相对于已有程序集不同部分的二进制delta数据,将该生成的二进制delta数据作为更新程序集发送给运行中的程序。例如,根据热更新需求修改的源代码可以为各种编程语言的源代码,例如本文档来自技高网...
一种热更新方法和装置

【技术保护点】
一种热更新方法,包括:响应于运行中的程序接收到热更新指令,获取更新程序集以及用于描述更新程序集与所述程序已有程序集区别的差异描述,其中,所述更新程序集与所述已有程序集中相同的元数据具有相同的标识;将所述更新程序集载入内存,以及根据所述差异描述,在所述更新程序集中查找出相对于已有程序集修改过的函数;对查找出的修改过的函数进行即时编译,得到更新本机代码;在所述修改过的函数对应的已有本机代码需要被运行时,以所述更新本机代码代替所述已有本机代码运行。

【技术特征摘要】
1.一种热更新方法,包括:响应于运行中的程序接收到热更新指令,获取更新程序集以及用于描述更新程序集与所述程序已有程序集区别的差异描述,其中,所述更新程序集与所述已有程序集中相同的元数据具有相同的标识;将所述更新程序集载入内存,以及根据所述差异描述,在所述更新程序集中查找出相对于已有程序集修改过的函数;对查找出的修改过的函数进行即时编译,得到更新本机代码;在所述修改过的函数对应的已有本机代码需要被运行时,以所述更新本机代码代替所述已有本机代码运行。2.根据权利要求1所述的方法,在响应于运行中的程序接收到热更新指令,获取更新程序集以及用于描述更新程序集与程序已有程序集区别的差异描述之前,还包括:对根据热更新需求修改的源代码进行编译,生成更新程序集;对所述更新程序集进行结构调整,使调整后的更新程序集与所述程序的已有程序集中相同的元数据具有相同的标识;将所述更新程序集与所述已有程序集进行比较,生成差异描述文件,其中,所述差异描述文件包含用于描述更新程序集与已有程序集区别的差异描述;向所述运行中的程序发送热更新指令,以使所述运行中的程序从所述差异描述文件中获取所述差异描述。3.根据权利要求1所述的方法,还包括:将所述修改过的函数对应的已有本机代码的第一条指令修改为跳转到所述更新本机代码处运行的跳转指令;所述在修改过的函数对应的已有本机代码需要被运行时,以更新本机代码代替已有本机代码运行的具体实现为:在修改过的函数对应的已有本机代码需要被运行时,进入所述已有本机代码的第一条指令运行,从而由所述跳转指令的运行跳转到所述更新本机代码处运行。4.根据权利要求3所述的方法,其中,如果所述修改过的函数为泛型函数,进一步查找出所有使用所述泛型函数实例化出的函数;针对每个使用所述泛型函数实例化出的函数,分别进行即时编译,得到对应的更新本机代码;将每个使用所述泛型函数实例化出的函数对应的已有本机代码的第一条指令修改为跳转到对应的所述更新本机代码处运行的跳转指令。5.根据权利要求1所述的方法,还包括:如果根据所述差异描述确定需要对指定方法的访问级别和/或指定字段的访问级别进行修改,查找出所述指定方法对应的对象和/或指定字段对应的对象;对查找出的对象的访问属性进行相应修改。6.根据权利要求1所述的方法,其中,所述更新程序集中包括:用于在全局哈希表中记录增加的字段与已有对象的映射关系的特定函数;在该特定函数对应的本机代码运行时,所述本机代码执行在所述全局哈希表中记录所述增加的字段与已有对象的映射关系的步骤;在对所述已有对象的引用期间,根据所述全局哈希表记录的映射关系对所述已有对象对应的增加的字段进行访问。7.根据权利要求6所述的方法,其中,在所述全局哈希表中记录映射关系而产生的对所述已有对象的引用为弱引用;且,还包括:按需对所述全局哈希表中记录的映射关系进行遍历,在遍历的过程中,对遍历到的映射关系中对应的对象是否被引用进行检查,如果否,则将该未被引用的对象的映射关系从所述全局哈希表中删除。8.根据权利要求2所述的方法,在对所述更新程序集进行结构调整之前,还包括:如果所述更新程序集以及已有程序集中由编译器优化而产生的类定义不同,将所述更新程序集中由编译器优化而产生的类的名称进行更改,以及将已有程序集中由编译器优化而产生的类定义复制到更新程序集中。9.一种热更新装置,包括:接收单元,配置用于响应于运行中的程序接收到热更新指令,获取更新程序集以及用于描述更新程序集与所述程序已有程序集区别的差异描述,其...

【专利技术属性】
技术研发人员:张伟土卢立祎
申请(专利权)人:网易杭州网络有限公司
类型:发明
国别省市:浙江;33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1