CN105677415B - 热更新方法及装置 - Google Patents
热更新方法及装置 Download PDFInfo
- Publication number
- CN105677415B CN105677415B CN201610006998.5A CN201610006998A CN105677415B CN 105677415 B CN105677415 B CN 105677415B CN 201610006998 A CN201610006998 A CN 201610006998A CN 105677415 B CN105677415 B CN 105677415B
- Authority
- CN
- China
- Prior art keywords
- variable
- function
- code
- update
- hash information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/656—Updates while running
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种热更新方法与装置,该方法包括:检测当前运行中的程序是否需要进行热更新;当确定所述程序需要进行热更新时,从服务器中获取热更新执行代码;所述热更新执行代码包括用于标识所述程序的模块中需要被更新的变量或函数的标识信息,以及用于替换需要被更新的变量或函数在内存中的本地内容代码的更新内容代码;运行所述热更新执行代码,根据标识信息查找需要被更新的变量或函数,并将更新内容代码替换变量或函数在内存中的本地内容代码,以更新变量或函数的内容;当通过模块创建的对象调用变量或函数时,以所述更新内容代码作为所述变量或函数的内容运行。本方法能简化客户端热更新的过程,减少热更新所需的流量,并且减少对开发人员编写热更新代码时受到的限制。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种热更新方法及装置。
背景技术
在互联网领域,常常需要在服务端对已经发布出去的客户端中出现问题的模块进行紧急修复更新,以保证系统的稳定性以及用户体验。
在现有技术中,热更新通常采用reload方法来对存在问题的模块进行重新加载。具体的,开发人员对存在问题的脚本模块进行更新,测试通过后将更新后的脚本模块推送给客户端。客户端接收到更新好的脚本模块后,对脚本模块进行即时编译,之后使用reload将对应的模块进行重载,重载过后程序在运行时调用新模块,并通过所述新模块生成新的对象。
但是,如果旧模块已经被加载过进内存,旧模块所创建旧的对象仍然指向旧模块,使得旧的对象没有得到更新。这种情况下需要则需要遍历所有加载过旧模块的对象,将其中错误的函数和变量逐一替换成新的函数和变量。
例如,现在存在一个human的模块,其中定义了一个Person类,Person类中存在一个方法is_young用于判断某个Person是否为年轻的。
上线后,测试人员发现正确的做法应该是年龄(self.age)小于40的才是年轻的。现有技术中,开发人员会修订这个错误,然后将新的human模块发送给客户端,客户端接收代码后,客户端接收代码后,覆盖本地的human代码内容,然后执行reload(human)重新加载human模块,此后新生成的Person对象中判断一个人是否年轻的方法被更新了。
然而,reload只解决了加载新代码的问题,而程序中已经被创建出来的旧的Person对象并没有因此而发生任何改变,旧的Person对象中判断一个人是否年轻的方法依然是错误的。因此,为了将问题彻底更新,那么还需要遍历所有现有Person对象的对象来刷新其中的方法以及变量,这是相当棘手以及耗时的。
同时,由于需要推送所有出现了问题的Python脚本,那么当问题分布在多个模块中或者所在模块代码量较大时,需要用户消耗较多的流量获取更新脚本。
此外,采用reload的方法进行热更新对开发人员来说有很多限制。例如,为了为了简化reload的复杂度,通常需要约束开发人员不能使用from…import模块的写法。
发明内容
本发明实施例提出一种热更新方法及装置,能简化客户端热更新的过程,减少热更新所需的流量,并且减少对开发人员编写热更新代码时受到的限制。
本发明一方面提供一种热更新方法,包括:
检测当前运行中的程序是否需要进行热更新;
当确定所述程序需要进行热更新时,从服务器中获取热更新执行代码;所述热更新执行代码包括标识信息与更新内容代码;所述标识信息用于标识所述程序的模块中需要被更新的变量或函数;每个所述的变量或函数在内存中存储了对应的本地内容代码;所述更新内容代码用于替换需要被更新的变量或函数在内存中的本地内容代码;
运行所述热更新执行代码,根据所述标识信息查找需要被更新的变量或函数,并将所述更新内容代码替换所述变量或函数在内存中的本地内容代码,以更新所述变量或函数的内容;
当通过所述模块创建的对象调用所述变量或函数时,以所述更新内容代码作为所述变量或函数的内容运行。
作为更优选地,所述当通过所述模块创建的对象调用所述变量或函数时,以所述更新内容代码作为所述变量或函数的内容运行,具体包括:
当通过所述模块创建的对象调用所述变量或函数时,检查所述变量或函数的内容相对于所述对象是否有新增的变量;
当有新增的变量时,对所述新增的变量初始化赋值,并以所述更新内容代码作为所述变量或函数的内容运行;
当没有新增的变量时,直接以所述更新内容代码作为所述变量或函数的内容运行。
作为更优选地,所述检测运行中的程序是否需要进行热更新,具体包括:
获取所述服务器发送的关于当前运行中的程序的热更新推送消息;所述热更新推送消息包括第一哈希信息;所述第一哈希信息为存储在所述服务器的热更新执行代码的哈希信息;
判断所述第一哈希信息与第二哈希信息是否一致;所述第二哈希信息为存储在本地的热更新执行代码的哈希信息;
若所述第一哈希信息与所述第二哈希信息一致,则确定所述程序不需要进行更新;
若所述第一哈希信息与所述第二哈希信息不一致,则确定所述程序需要进行更新;
在所述运行所述热更新执行代码,根据所述标识信息查找需要被更新的变量或函数,并将所述更新内容代码替换所述变量或函数在内存中的本地内容代码,以更新所述变量或函数的内容之后,还包括:
存储所述第一哈希信息,并将所述第一哈希信息覆盖所述第二哈希信息。
作为更优选地,所述运行所述热更新执行代码,根据所述标识信息查找需要被更新的变量或函数,并将所述更新内容代码替换所述变量或函数在内存中的本地内容代码,以更新所述变量或函数的内容,具体包括:
计算获取到的热更新执行代码的哈希信息;
判断获取到的热更新执行代码的哈希信息与所述第一哈希信息是否一致;
若获取到的热更新执行代码的哈希信息与所述第一哈希信息一致,运行所述热更新执行代码,根据所述标识信息查找需要被更新的变量或函数,并将所述更新内容代码替换所述变量或函数在内存中的本地内容代码,以更新所述变量或函数的内容。
作为更优选地,所述热更新方法还包括:
若获取到的热更新执行代码的哈希信息与所述第一哈希信息不一致,则重新从服务器获取用于对所述程序热更新的热更新执行代码。
作为更优选地,所述哈希信息为对应的热更新执行代码的MD5值。
本发明另一方面提供一种热更新装置,包括:
热更新检测模块,用于检测当前运行中的程序是否需要进行热更新;
执行代码获取模块,用于当确定所述程序需要进行热更新时,从服务器中获取热更新执行代码;所述热更新执行代码包括标识信息与更新内容代码;所述标识信息用于标识所述程序的模块中需要被更新的变量或函数;每个所述的变量或函数在内存中存储了对应的本地内容代码;所述更新内容代码用于替换需要被更新的变量或函数在内存中的本地内容代码;
执行代码运行模块,用于运行所述热更新执行代码,根据所述标识信息查找需要被更新的变量或函数,并将所述更新内容代码替换所述变量或函数在内存中的本地内容代码,以更新所述变量或函数的内容;
对象运行模块,用于当通过所述模块创建的对象调用所述变量或函数时,以所述更新内容代码作为所述变量或函数的内容运行。
作为更优选地,所述对象运行模块具体包括:
变量检查单元,用于当通过所述模块创建的对象调用所述变量或函数时,检查所述变量或函数的内容相对于所述对象是否有新增的变量;
第一运行单元,用于当有新增的变量时,对所述新增的变量初始化赋值,并以所述更新内容代码作为所述变量或函数的内容运行;
第二运行单元,用于当没有新增的变量时,直接以所述更新内容代码作为所述变量或函数的内容运行。
作为更优选地,所述热更新检测模块具体包括:
推送消息获取单元,用于获取所述服务器发送的关于当前运行中的程序的热更新推送消息;所述热更新推送消息包括第一哈希信息;所述第一哈希信息为存储在所述服务器的热更新执行代码的哈希信息;
第一判断单元,用于判断所述第一哈希信息与第二哈希信息是否一致;所述第二哈希信息为存储在本地的热更新执行代码的哈希信息;
第一确定单元,用于当所述第一哈希信息与所述第二哈希信息一致时,确定所述程序不需要进行更新;
第二确定单元,用于当所述第一哈希信息与所述第二哈希信息不一致时,确定所述程序需要进行更新;
所述热更新装置还包括哈希信息更替模块,用于在更新所述变量或函数的内容之后,存储所述第一哈希信息,并将所述第一哈希信息覆盖所述第二哈希信息。
作为更优选地,所述执行代码运行模块具体包括:
哈希信息计算单元,用于计算获取到的热更新执行代码的哈希信息;
第二判断单元,用于判断获取到的热更新执行代码的哈希信息与所述第一哈希信息是否一致;
执行单元,用于当获取到的热更新执行代码的哈希信息与所述第一哈希信息一致时,运行所述热更新执行代码,根据所述标识信息查找需要被更新的变量或函数,并将所述更新内容代码替换所述变量或函数在内存中的本地内容代码,以更新所述变量或函数的内容。
作为更优选地,所述热更新装置还包括:
二次获取模块,用于当获取到的热更新代码的哈希信息与所述第一哈希信息不一致时,重新从服务器获取用于对所述程序热更新的热更新代码。
作为更优选地,所述哈希信息为对应的热更新执行代码的MD5值。
本发明的有益效果在于:本实施例提供了一种热更新方法,在热更新时直接替换模块中需要更新的变量或函数的内容,使得所述模块创建的新/旧对象在调用所述变量或函数时都能以新的内容运行,从而无需记录所述模块的实例化情况,无需另行对依据模块创建旧对象进行追踪和逐一替换,大大减少了客户端进行程序的热更新时的复杂度;不需要重新加载模块以及检测被加载过的模块,这对程序的源代码设计没有特定要求,节省了热更新的耗时以及降低了出错的可能性,提高了系统的稳定性;由于所述更新内容代码时用于替换需要更新的变量或函数的本地内容代码的,因此在获取热更新执行代码时无需获取整个模块的代码,只需要获取需要更新的变量或函数那部分的代码,从而大大减少了流量;由于本方法没有采用reload的方式进行热更新,因而减少了开发人员在编写热更新代码时受到的限制。同时,由于引入了哈希信息来判断是否需要进行热更新,因此大大避免了客户端由于重复获取热更新执行代码导致的流量的浪费。另外,哈希信息的使用也避免了客户端利用传输过程中出错的热更新执行代码进行热更新而导致的系统出错、崩溃等现象的发生,保证了客户端系统的稳定性以及良好的用户体验。
附图说明
图1是本发明实施例提供的热更新方法的的流程示意图;
图2是本发明实施例提供的热更新方法的步骤S1的流程示意图;
图3是本发明实施例提供的热更新方法的步骤S3的流程示意图;
图4是本发明实施例提供的热更新装置的结构框图;
图5是本发明实施例提供的热更新装置的热更新检测模块1的结构框图;
图6是本发明实施例提供的热更新装置的执行代码运行模块3的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参见图1,是本发明实施例提供的热更新方法的流程示意图,包括步骤S1至S4,具体如下:
S1,检测当前运行中的程序是否需要进行热更新;
S2,当确定所述程序需要进行热更新时,从服务器中获取热更新执行代码;所述热更新执行代码包括标识信息与更新内容代码;所述标识信息用于标识所述程序的模块中需要被更新的变量或函数;每个所述的变量或函数在内存中存储了对应的本地内容代码;所述更新内容代码用于替换需要被更新的变量或函数在内存中的本地内容代码;
S3,运行所述热更新执行代码,根据所述标识信息查找需要被更新的变量或函数,并将所述更新内容代码替换所述变量或函数在内存中的本地内容代码,以更新所述变量或函数的内容;
S4,当通过所述模块创建的对象调用所述变量或函数时,以所述更新内容代码作为所述变量或函数的内容运行。
在本实施例中所述热更新执行代码可以为但不限于Python代码。
所述热更新执行代码属于脚本代码,用于指导客户端如何进行热更新。在本实施例中,开发人员先在客户端中定位到存在问题的模块,然后单独取出所述模块存在问题的函数或者变量,放在热更新执行代码中进行修正。客户端在接收到所述热更新执行代码时能够根据所述热更新执行代码对所述模块存在问题的函数或者变量的内容进行更新。具体地,所述运行所述热更新执行代码包括:将所述热更新执行代码编译为可执行的代码模块,并执行编译好的代码模块。对于Python代码来说,此处提到的编译以及执行可以借助Python内置的compile以及exec方法来实现。
所述标识信息用于记录所述模块中需要被更新的变量或函数;所述标识信息可以为每个需要被更新的变量或函数在客户端的存储地址。
所述更新内容代码包括N份子代码,所述N份子代码一一对应于所述标识信息所记录的N个需要被更新的变量或函数。在步骤S3的替换过程中,在确定一个需要被更新的变量或函数时,将所述需要被更新的变量或函数所对应的子代码覆盖所述需要被更新的变量或函数在内存中的本地内容代码存储,以更新所述变量或函数的内容。
需要说明的是,当模块中有变量和函数都需要更新时,所述标识信息同时记录需要被更新的变量和函数;在替换时,变量对应于变量替换,而函数对应于函数替换。
在步骤S4中,所述通过所述模块创建的对象是包括热更新之前创建的对象,以及热更新之后创建的对象。由于变量或函数的内存地址没有改变,改变的是变量或函数的内容,因此,无论是旧的对象还是新的对象,在调用所述变量或函数时都能够以所述变量或函数的更新后的内容运行,从而无需记录所述模块的实例化情况。
作为更优选地,所述步骤S4具体包括:
当通过所述模块创建的对象调用所述变量或函数时,检查所述变量或函数的内容相对于所述对象是否有新增的变量;
当有新增的变量时,对所述新增的变量初始化赋值,并以所述更新内容代码作为所述变量或函数的内容运行;
当没有新增的变量时,直接以所述更新内容代码作为所述变量或函数的内容运行。
例如,当对一个模块中的一个函数的内容进行更新后,在函数的内容中新增加了一个变量。在旧的对象调用所述函数时,由于不存在所述新增的变量,造成的前后数据不一致而出错。而在本实施例中,当发现所述变量或函数的内容相对于所述对象有新增的变量时,对所述新增的变量初始化赋值来修复新增变量缺失的问题。
本实施例提供了一种热更新方法,在热更新时直接替换模块中需要更新的变量或函数的内容,使得所述模块创建的新/旧对象在调用所述变量或函数时都能以新的内容运行,从而无需记录所述模块的实例化情况,无需另行对依据模块创建旧对象进行追踪和逐一替换,大大减少了客户端进行程序的热更新时的复杂度;由于所述更新内容代码时用于替换需要更新的变量或函数的本地内容代码的,因此在获取热更新执行代码时无需获取整个模块的代码,只需要获取需要更新的变量或函数那部分的代码,从而大大减少了流量;由于本方法没有采用reload的方式进行热更新,因而减少了开发人员在编写热更新代码时受到的限制。
作为对本实施例的进一步改进,所述步骤S1还包括步骤S11~S14。
参见图2,是本发明实施例提供的热更新方法的步骤S1的流程示意图,包括:
S11:获取所述服务器发送的关于程序的热更新推送消息;所述热更新推送消息包括第一哈希信息;所述第一哈希信息为存储在所述服务器的热更新执行代码的哈希信息;
S12:判断所述第一哈希信息与第二哈希信息是否一致;所述第二哈希信息为存储在本地的热更新执行代码的哈希信息;
S13:若所述第一哈希信息与所述第二哈希信息一致,则确定所述程序不需要进行更新;
S14:若所述第一哈希信息与所述第二哈希信息不一致,则确定所述程序需要进行更新;
在所述步骤S3之后,还包括:
存储所述第一哈希信息,并将所述第一哈希信息覆盖所述第二哈希信息。
在本实施例中,所述哈希信息为对应热更新执行代码的MD5值。
其中,在S12,S13和S14中,判断所述第一哈希信息与第二哈希信息是否一致,用于判定客户端上的模块是否需要更新,若需要更新则重新从服务器获取热更新执行代码,若不需要更新则直接丢弃接收到的热更新执行代码和哈希信息,而不再从服务器获取热更新执行代码,由此可避免客户端流量的浪费。
需要说明的是,本实施例只是检测程序是否需要进行热更新的其中一个方案,还可以是检测到定时更新的命令,或者检测到用户输入的主动寻找更新的命令等。
此外,对于离线的客户端,则将热更新的时机延迟到客户端登陆时。
作为对本实施例的进一步改进,所述步骤S3具体包括步骤S31至S33。
参见图3,是本发明实施例提供的热更新方法的步骤S3的流程示意图,包括:
S31:计算获取到的热更新执行代码的哈希信息;
S32:判断获取到的热更新执行代码的哈希信息与所述第一哈希信息是否一致;
S33:当获取到的热更新执行代码的哈希信息与所述第一哈希信息一致时,运行所述热更新执行代码,根据所述标识信息查找需要被更新的变量或函数,并将所述更新内容代码替换所述变量或函数在内存中的本地内容代码,以更新所述变量或函数的内容。
其中,在S31中,计算获取到的热更新执行代码的哈希信息,是指计算客户端获取的由服务器推送的热更新执行代码的哈希信息。
在S33中,客户端判断计算得到的热更新执行代码的哈希信息与所述第一哈希信息是否一致,用于判定推送的热更新执行代码在传输途中是否出错,若一致,即没有出错,则进行程序的热更新;若不一致,即出错,则丢弃所获取的热更新执行代码。
作为更优选地,所述热更新方法还包括:
若获取到的热更新执行代码的哈希信息与所述第一哈希信息不一致,则重新从服务器获取用于对所述程序的热更新的热更新执行代码。即热更新执行代码出错时能够重新从服务器获取新的热更新执行代码,直到所述热更新执行代码正确。
在本实施例中,由于哈希信息的使用,确保了客户端接收到的来自服务器的热更新执行代码是完整且正确的,避免了由于错误的程序的更新导致的系统出错、崩溃等现象,保证了系统的稳定性和良好的用户体验。
相应地,本发明实施例还提供一种热更新装置。
参见图4,是本发明实施例提供的一种热更新装置的结构框图,包括:
热更新检测模块1,用于检测当前运行中的程序是否需要进行热更新;
执行代码获取模块2,用于当确定所述程序需要进行热更新时,从服务器中获取热更新执行代码;所述热更新执行代码包括标识信息与更新内容代码;所述标识信息用于标识所述程序的模块中需要被更新的变量或函数;每个所述的变量或函数在内存中存储了对应的本地内容代码;所述更新内容代码用于替换需要被更新的变量或函数在内存中的本地内容代码;其中,所述变量或函数为变量和/或函数。
执行代码运行模块3,用于运行所述热更新执行代码,根据所述标识信息查找需要被更新的变量或函数,并将所述更新内容代码替换所述变量或函数在内存中的本地内容代码,以更新所述变量或函数的内容;
对象运行模块4,用于当通过所述模块创建的对象调用所述变量或函数时,以所述更新内容代码作为所述变量或函数的内容运行。
作为更优选地,所述对象运行模块4具体包括:
变量检查单元,用于当通过所述模块创建的对象调用所述变量或函数时,检查所述变量或函数的内容相对于所述对象是否有新增的变量;
第一运行单元,用于当有新增的变量时,对所述新增的变量初始化赋值,并以所述更新内容代码作为所述变量或函数的内容运行;
第二运行单元,用于当没有新增的变量时,直接以所述更新内容代码作为所述变量或函数的内容运行。
参见图5,是本发明实施例提供的一种热更新装置的热更新检测模块1的结构框图。所述热更新检测模块1包括:
推送消息获取单元11,用于获取所述服务器发送的关于当前运行中的程序的热更新推送消息;所述热更新推送消息包括第一哈希信息;所述第一哈希信息为存储在所述服务器的热更新执行代码的哈希信息;
第一判断单元12,用于判断所述第一哈希信息与第二哈希信息是否一致;所述第二哈希信息为存储在本地的热更新执行代码的哈希信息;
第一确定单元13,用于当所述第一哈希信息与所述第二哈希信息一致时,确定所述程序不需要进行更新;
第二确定单元14,用于当所述第一哈希信息与所述第二哈希信息不一致时,确定所述程序需要进行更新;
所述的程序的热更新装置还具体包括哈希信息更替模块,用于在更新所述变量或函数的内容之后,存储所述第一哈希信息,并将所述第一哈希信息覆盖所述第二哈希信息。
参见图6,是本发明实施例提供的一种热更新装置的执行代码运行模块3的结构框图。所述执行代码运行模块3包括:
哈希信息计算单元31,用于用与所述服务器相同的算法,计算获取到的热更新执行代码的哈希信息;
第二判断单元32,用于判断获取到的热更新执行代码的哈希信息与所述第一哈希信息是否一致;
执行单元33,用于当获取到的热更新执行代码的哈希信息与所述第一哈希信息一致时,运行所述热更新执行代码,根据所述标识信息查找需要被更新的变量或函数,并将所述更新内容代码替换所述变量或函数在内存中的本地内容代码,以更新所述变量或函数的内容。
作为更优选地,所述热更新装置还包括:
二次获取模块,用于当获取到的热更新执行代码的哈希信息与所述第一哈希信息不一致时,重新从服务器获取用于对所述程序的热更新的热更新执行代码。
本发明实施例提供的一种热更新装置用于执行上述热更新方法的所有方法步骤,其工作原理和有益效果一一对应,因而不再赘述。
本发明的有益效果在于:本实施例提供了一种热更新方法,在热更新时直接替换模块中需要更新的变量或函数的内容,使得所述模块创建的新/旧对象在调用所述变量或函数时都能以新的内容运行,从而无需记录所述模块的实例化情况,无需另行对依据模块创建旧对象进行追踪和逐一替换,大大减少了客户端进行程序的热更新时的复杂度;不需要重新加载模块以及检测被加载过的模块,这对程序的源代码设计没有特定要求,节省了热更新的耗时以及降低了出错的可能性,提高了系统的稳定性;由于所述更新内容代码时用于替换需要更新的变量或函数的本地内容代码的,因此在获取热更新执行代码时无需获取整个模块的代码,只需要获取需要更新的变量或函数那部分的代码,从而大大减少了流量;由于本方法没有采用reload的方式进行热更新,因而减少了开发人员在编写热更新代码时受到的限制。同时,由于引入了哈希信息来判断是否需要进行热更新,因此大大避免了客户端由于重复获取热更新执行代码导致的流量的浪费。另外,哈希信息的使用也避免了客户端利用传输过程中出错的热更新执行代码进行热更新而导致的系统出错、崩溃等现象的发生,保证了客户端系统的稳定性以及良好的用户体验。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。
Claims (10)
1.一种热更新方法,其特征在于,包括:
检测当前运行中的程序是否需要进行热更新;
当确定所述程序需要进行热更新时,从服务器中获取热更新执行代码;所述热更新执行代码包括标识信息与更新内容代码;所述标识信息用于标识所述程序的模块中需要被更新的变量或函数;每个所述的变量或函数在内存中存储了对应的本地内容代码;所述更新内容代码用于替换需要被更新的变量或函数在内存中的本地内容代码;其中,所述热更新执行代码预先将放入的需要被更新的变量或函数进行修正;
运行所述热更新执行代码,根据所述标识信息查找需要被更新的变量或函数,并将所述更新内容代码替换所述变量或函数在内存中的本地内容代码,以更新所述变量或函数的内容;
当通过所述模块创建的对象调用所述变量或函数时,以所述更新内容代码作为所述变量或函数的内容运行;
其中,所述当通过所述模块创建的对象调用所述变量或函数时,以所述更新内容代码作为所述变量或函数的内容运行,具体包括:
当通过所述模块创建的对象调用所述变量或函数时,检查所述变量或函数的内容相对于所述对象是否有新增的变量;
当有新增的变量时,对所述新增的变量初始化赋值,并以所述更新内容代码作为所述变量或函数的内容运行;
当没有新增的变量时,直接以所述更新内容代码作为所述变量或函数的内容运行。
2.如权利要求1所述的热更新方法,其特征在于,所述检测运行中的程序是否需要进行热更新,具体包括:
获取所述服务器发送的关于当前运行中的程序的热更新推送消息;所述热更新推送消息包括第一哈希信息;所述第一哈希信息为存储在所述服务器的热更新执行代码的哈希信息;
判断所述第一哈希信息与第二哈希信息是否一致;所述第二哈希信息为存储在本地的热更新执行代码的哈希信息;
若所述第一哈希信息与所述第二哈希信息一致,则确定所述程序不需要进行更新;
若所述第一哈希信息与所述第二哈希信息不一致,则确定所述程序需要进行更新;
在所述运行所述热更新执行代码,根据所述标识信息查找需要被更新的变量或函数,并将所述更新内容代码替换所述变量或函数在内存中的本地内容代码,以更新所述变量或函数的内容之后,还包括:
存储所述第一哈希信息,并将所述第一哈希信息覆盖所述第二哈希信息。
3.如权利要求2所述的热更新方法,其特征在于,所述运行所述热更新执行代码,根据所述标识信息查找需要被更新的变量或函数,并将所述更新内容代码替换所述变量或函数在内存中的本地内容代码,以更新所述变量或函数的内容,具体包括:
计算获取到的热更新执行代码的哈希信息;
判断获取到的热更新执行代码的哈希信息与所述第一哈希信息是否一致;
若获取到的热更新执行代码的哈希信息与所述第一哈希信息一致,运行所述热更新执行代码,根据所述标识信息查找需要被更新的变量或函数,并将所述更新内容代码替换所述变量或函数在内存中的本地内容代码,以更新所述变量或函数的内容。
4.如权利要求3所述的热更新方法,其特征在于,所述热更新方法还包括:
若获取到的热更新执行代码的哈希信息与所述第一哈希信息不一致,则重新从服务器获取用于对所述程序热更新的热更新执行代码。
5.如权利要求2所述的热更新方法,其特征在于,所述哈希信息为对应的热更新执行代码的MD5值。
6.一种热更新装置,其特征在于,包括:
热更新检测模块,用于检测当前运行中的程序是否需要进行热更新;
执行代码获取模块,用于当确定所述程序需要进行热更新时,从服务器中获取热更新执行代码;所述热更新执行代码包括标识信息与更新内容代码;所述标识信息用于标识所述程序的模块中需要被更新的变量或函数;每个所述的变量或函数在内存中存储了对应的本地内容代码;所述更新内容代码用于替换需要被更新的变量或函数在内存中的本地内容代码;其中,所述热更新执行代码预先将放入的需要被更新的变量或函数进行修正;
执行代码运行模块,用于运行所述热更新执行代码,根据所述标识信息查找需要被更新的变量或函数,并将所述更新内容代码替换所述变量或函数在内存中的本地内容代码,以更新所述变量或函数的内容;
对象运行模块,用于当通过所述模块创建的对象调用所述变量或函数时,以所述更新内容代码作为所述变量或函数的内容运行;
所述对象运行模块具体包括:
变量检查单元,用于当通过所述模块创建的对象调用所述变量或函数时,检查所述变量或函数的内容相对于所述对象是否有新增的变量;
第一运行单元,用于当有新增的变量时,对所述新增的变量初始化赋值,并以所述更新内容代码作为所述变量或函数的内容运行;
第二运行单元,用于当没有新增的变量时,直接以所述更新内容代码作为所述变量或函数的内容运行。
7.如权利要求6所述的热更新装置,其特征在于,所述热更新检测模块具体包括:
推送消息获取单元,用于获取所述服务器发送的关于当前运行中的程序的热更新推送消息;所述热更新推送消息包括第一哈希信息;所述第一哈希信息为存储在所述服务器的热更新执行代码的哈希信息;
第一判断单元,用于判断所述第一哈希信息与第二哈希信息是否一致;所述第二哈希信息为存储在本地的热更新执行代码的哈希信息;
第一确定单元,用于当所述第一哈希信息与所述第二哈希信息一致时,确定所述程序不需要进行更新;
第二确定单元,用于当所述第一哈希信息与所述第二哈希信息不一致时,确定所述程序需要进行更新;
所述热更新装置还包括哈希信息更替模块,用于在更新所述变量或函数的内容之后,存储所述第一哈希信息,并将所述第一哈希信息覆盖所述第二哈希信息。
8.如权利要求7所述的热更新装置,其特征在于,所述执行代码运行模块具体包括:
哈希信息计算单元,用于计算获取到的热更新执行代码的哈希信息;
第二判断单元,用于判断获取到的热更新执行代码的哈希信息与所述第一哈希信息是否一致;
执行单元,用于当获取到的热更新执行代码的哈希信息与所述第一哈希信息一致时,运行所述热更新执行代码,根据所述标识信息查找需要被更新的变量或函数,并将所述更新内容代码替换所述变量或函数在内存中的本地内容代码,以更新所述变量或函数的内容。
9.如权利要求8所述的热更新装置,其特征在于,所述热更新装置还包括:
二次获取模块,用于当获取到的热更新代码的哈希信息与所述第一哈希信息不一致时,重新从服务器获取用于对所述程序热更新的热更新代码。
10.如权利要求7所述的热更新装置,其特征在于,所述哈希信息为对应的热更新执行代码的MD5值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610006998.5A CN105677415B (zh) | 2016-01-06 | 2016-01-06 | 热更新方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610006998.5A CN105677415B (zh) | 2016-01-06 | 2016-01-06 | 热更新方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105677415A CN105677415A (zh) | 2016-06-15 |
CN105677415B true CN105677415B (zh) | 2020-07-17 |
Family
ID=56299164
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610006998.5A Active CN105677415B (zh) | 2016-01-06 | 2016-01-06 | 热更新方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105677415B (zh) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106227554A (zh) * | 2016-07-08 | 2016-12-14 | 百度在线网络技术(北京)有限公司 | 一种在ios系统中进行应用热更新的方法和装置 |
CN107092496A (zh) * | 2016-12-28 | 2017-08-25 | 北京小度信息科技有限公司 | 一种应用软件的升级方法及装置 |
CN109086059B (zh) * | 2017-06-14 | 2023-05-09 | 腾讯科技(北京)有限公司 | 代码加载更新方法、装置及服务器 |
CN107729041B (zh) * | 2017-07-26 | 2020-10-20 | 深圳壹账通智能科技有限公司 | 应用程序热更新方法、装置、终端和存储介质 |
CN109408134B (zh) * | 2017-08-16 | 2022-04-08 | 阿里巴巴集团控股有限公司 | 模型文件的处理方法、装置、系统以及处理设备 |
CN110019005A (zh) * | 2017-09-29 | 2019-07-16 | 北京嘀嘀无限科技发展有限公司 | 文件更新方法、装置、计算机设备和可读存储介质 |
CN108055307A (zh) * | 2017-12-06 | 2018-05-18 | 杭州电魂网络科技股份有限公司 | 服务器更新方法及装置 |
CN108427571A (zh) * | 2018-02-07 | 2018-08-21 | 深圳市雁联计算系统有限公司 | 一种动态链接库更新方法及服务器 |
CN108388431B (zh) * | 2018-02-13 | 2021-03-02 | Oppo广东移动通信有限公司 | 应用程序热更新的控制方法、装置、存储介质及移动终端 |
CN109491687B (zh) * | 2018-11-16 | 2022-02-22 | 北京字节跳动网络技术有限公司 | 一种应用软件的热更新方法、装置、终端及可读介质 |
CN109634636B (zh) * | 2018-12-17 | 2022-05-17 | 百度在线网络技术(北京)有限公司 | 应用处理方法、装置、设备和介质 |
CN111510466B (zh) * | 2019-01-30 | 2022-09-23 | 阿里巴巴集团控股有限公司 | 客户端的数据更新方法、装置、电子设备及可读介质 |
CN109918112B (zh) * | 2019-03-15 | 2022-10-04 | 网易(杭州)网络有限公司 | 游戏热更新方法、装置和存储介质 |
CN110187910B (zh) * | 2019-05-30 | 2023-09-05 | 腾讯科技(上海)有限公司 | 一种热更新方法、装置、设备及计算机可读存储介质 |
CN110908694A (zh) * | 2019-11-18 | 2020-03-24 | 政采云有限公司 | 一种电子招投标客户端应用的热更新系统及方法 |
CN111143224A (zh) * | 2019-12-30 | 2020-05-12 | 广州酷狗计算机科技有限公司 | 桩服务的实现方法、装置、设备及计算机存储介质 |
CN111416842B (zh) * | 2020-03-06 | 2022-08-05 | 科大讯飞股份有限公司 | 一种资源集群自动分发及热更新系统及方法 |
CN111857682B (zh) * | 2020-06-28 | 2022-09-13 | 厦门极致互动网络技术股份有限公司 | 客户端执行远程自定义代码方法及系统、客户端、服务器 |
CN112426722B (zh) * | 2020-12-09 | 2024-06-11 | 网易(杭州)网络有限公司 | 节点图的热更新方法、装置、存储介质及计算机设备 |
CN112612516B (zh) * | 2020-12-30 | 2024-05-03 | 瑞庭网络技术(上海)有限公司 | 一种代码处理方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103677869A (zh) * | 2012-09-06 | 2014-03-26 | 中国科学院计算技术研究所 | 无线传感器网络节点远程代码更新系统及方法 |
CN103984582A (zh) * | 2014-06-04 | 2014-08-13 | 网易(杭州)网络有限公司 | 一种热更新方法和装置 |
CN104850386A (zh) * | 2014-01-09 | 2015-08-19 | 武汉联影医疗科技有限公司 | 一种软件系统国际化资源的处理方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4042280B2 (ja) * | 1999-12-21 | 2008-02-06 | 富士ゼロックス株式会社 | 実行プログラムの生成方法及び実行プログラム生成装置、実行プログラムの実行方法、並びに、コンピュータ可読プログラム記憶媒体 |
US6745324B1 (en) * | 2000-11-16 | 2004-06-01 | International Business Machines Corporation | Dynamic firmware image creation from an object file stored in a reserved area of a data storage device of a redundant array of independent disks (RAID) system |
CN104778118B (zh) * | 2013-12-30 | 2018-08-28 | 深圳键桥通讯技术股份有限公司 | 自动化测试技术的改进方法 |
CN104331308B (zh) * | 2014-10-30 | 2017-08-22 | 章立春 | 一种pe程序文件加载执行方法 |
-
2016
- 2016-01-06 CN CN201610006998.5A patent/CN105677415B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103677869A (zh) * | 2012-09-06 | 2014-03-26 | 中国科学院计算技术研究所 | 无线传感器网络节点远程代码更新系统及方法 |
CN104850386A (zh) * | 2014-01-09 | 2015-08-19 | 武汉联影医疗科技有限公司 | 一种软件系统国际化资源的处理方法 |
CN103984582A (zh) * | 2014-06-04 | 2014-08-13 | 网易(杭州)网络有限公司 | 一种热更新方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN105677415A (zh) | 2016-06-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105677415B (zh) | 热更新方法及装置 | |
CN103984582B (zh) | 一种热更新方法和装置 | |
JP6287549B2 (ja) | ソースコードをポーティングする方法及び装置 | |
US10509693B2 (en) | Method for identifying a cause for a failure of a test | |
US10289536B2 (en) | Distinguishing public and private code in testing environments | |
US10579513B2 (en) | Test run control method and apparatus | |
US9134977B2 (en) | Compiler operation for handling conditional statements | |
CN109840194B (zh) | 一种配置文件的检测方法及系统 | |
US20030088810A1 (en) | Methods and apparatus for determining software component sizes associated with errors | |
CN104133699A (zh) | 设备系统软件升级方法与系统 | |
JP2010134643A (ja) | テストケースの選択方法及び選択システム | |
CN111414189A (zh) | 一种确定版本兼容性的方法及装置 | |
CN114780138B (zh) | 流场模拟软件代码版本管理方法、装置和存储介质 | |
CN113110865A (zh) | 一种服务器热更新方法及装置 | |
CN108694049B (zh) | 一种更新软件的方法和设备 | |
WO2022156512A1 (zh) | 一种固件更新方法、装置、设备及存储介质 | |
CN111142922B (zh) | 应用程序更新方法、装置、终端及服务器 | |
US6269367B1 (en) | System and method for automated identification, remediation, and verification of computer program code fragments with variable confidence factors | |
CN106909434B (zh) | 可执行程序中未定义函数的检测方法及装置 | |
CN116483700A (zh) | 一种基于反馈机制的api误用检测与修正方法 | |
CN114610516A (zh) | 应用程序的修复方法、装置、计算机设备以及存储介质 | |
CN113050948B (zh) | 动态库优化方法、装置、设备及存储介质 | |
CN115167896A (zh) | 一种更新软件版本的方法、装置、存储介质及电子设备 | |
CN113568834A (zh) | Sdk代码的兼容性检测方法、装置、计算机设备和介质 | |
CN113760361A (zh) | 代码文件生成方法、计算机设备及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |