一种不停服的热更新方法技术

技术编号:21273193 阅读:25 留言:0更新日期:2019-06-06 07:47
一种不停服的热更新方法,包括以下步骤:将需要进行热补丁的可执行文件静态加载应用补丁库;修复可执行文件;修复后的可执行文件调用创建补丁库的接口,指明要修复的函数所在模块、函数相对于模块基地址的偏移地址以及新的函数地址;使用补丁可执行文件中的新的函数替换原文件中的原函数。本发明专利技术的方法,能够使得一些低优先级的BUG也能够得到及时的处理,配合业务功能控制系统,可以在暂时关闭某些功能后在线修复BUG,然后在线恢复业务,整个过程无须关闭服务器,做到不中断主要的游戏体验。

A Non-stop Thermal Renewal Method

An uninterrupted hot update method includes the following steps: static loading application patch libraries for executable files requiring hot patches; repairing executable files; calling the interface of creating patch libraries after repairing executable files, specifying the module where the function to be repaired is located, the offset address of the function relative to the module base address and the new function address; and using patch executable text. The new function in the file replaces the original function in the original file. The method of the invention can also enable some low priority BUGs to be processed in time. With the business function control system, BUG can be repaired online after temporarily closing some functions, and then business can be restored online. The whole process does not need to shut down the server, so as not to interrupt the main game experience.

【技术实现步骤摘要】
一种不停服的热更新方法
本专利技术涉及服务器更新方法,特别是一种不停服的热更新方法。
技术介绍
游戏服务器通常都需要不间断对外提供服务,常规的游戏服务器会有周期性的维护,进行服务器升级以及修复一些优先级较低的BUG,新游戏在进行一定规模测试的阶段,往往存在大量的问题,修复的方式也只能是停服重启。正式的线上环境要修复已知BUG同样只能停服重启,或者任由低优先级BUG存在。重启会影响用户体验,同时也影响游戏的运营数据。
技术实现思路
为了解决现有技术存在的不足,本专利技术的目的在于提供一种不停服的热更新方法。本专利技术能够使得一些低优先级的BUG也能够得到及时的处理,配合业务功能控制系统,可以在暂时关闭某些功能后在线修复BUG,然后在线恢复业务,整个过程无须关闭服务器,做到不中断主要的游戏体验。为实现上述目的,本专利技术的一种不停服的热更新方法,包括以下步骤:将需要进行热补丁的可执行文件静态加载应用补丁库;修复可执行文件;修复后的可执行文件调用创建补丁库的接口,指明要修复的函数所在模块、函数相对于模块基地址的偏移地址以及新的函数地址;使用补丁可执行文件中的新的函数替换原文件中的原函数。进一步地,所述将需要进行热补丁的可执行文件静态加载应用补丁库的步骤,进一步包括,加载应用补丁库,生成的可执行文件;所述可执行文件,包括两个预留的内存页,分别为用于存放补丁数据的内存页和用于存放补丁代码的内存页。进一步地,所述修复可执行文件的步骤,进一步包括,在修复可执行文件时,添加一个与原函数签名一致的新的函数,并在新的函数中修改存在的问题,新添加的函数编译后存放在预留的代码内存页中。进一步地,所述修复可执行文件的步骤,进一步包括,引入额外的全局变量,全局变量遵守与新的函数编写相同的规则,并且全局变量存在放预留的数据内存页中。进一步地,所述修复后的可执行文件调用创建补丁库的接口,指明要修复的函数所在模块、函数相对于模块基地址的偏移地址以及新的函数地址的步骤,进一步包括,创建补丁库并根据传入的信息生成补丁文件,记录所指明的信息,同时将预留的数据代码页和内存代码页的二进制数据存入补丁文件。更进一步地,所述使用补丁可执行文件中的新的函数替换原文件中的原函数的步骤,进一步包括,接收到需要应用补丁的指令后,调用应用补丁库的接口加载生产的补丁文件,将其中内存页和代码页装载到自身预留的内存页和代码页中,并解析其中的补丁信息,根据模块信息和相对偏移地址,重新计算出被补丁函数的地址,并将被补丁函数修改为jump指令,使其跳转到新的函数地址。本专利技术提供的不停服的热更新方法,具有以下优点:1、对开发商而言,无须重启服务器就能够及时修复已知的BUG。2、对于玩家而言,有问题的业务可能会受到影响,但是其他没有问题的业务仍可以体验。3、对运维而言,整个补丁过程全透明,只需按照说明布置好补丁文件和执行相关的运维命令即可,不会引入额外的复杂度。4、对于开发人员而言,制作补丁的过程大部分委托给相关的补丁库程序,只需遵守少量规则即可进行热补丁的开发工作,同时应用补丁的过程由补丁库全权负责,降低学习曲线。本专利技术的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本专利技术而了解。附图说明附图用来提供对本专利技术的进一步理解,并且构成说明书的一部分,并与本专利技术的实施例一起,用于解释本专利技术,并不构成对本专利技术的限制。在附图中:图1为根据本专利技术的不停服的热更新方法流程图;图2为根据本专利技术的创建补丁库和应用补丁库工作流程图。具体实施方式以下结合附图对本专利技术的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本专利技术,并不用于限定本专利技术。在本专利技术中,补丁文件,是指由程序自动生成的一种自定义格式的二进制数据文件;创建补丁库,是指用于生成补丁文件的DLL库文件;应用补丁库,是指用于加载应并用补丁文件的DLL库文件;HOOK,是一种挂钩技术,是指通过修改函数汇编代码,使其跳转到新的函数地址的一种方法。其中,创建补丁库和应用补丁库是本方法的核心工作库,创建补丁库工作在修复过后的服务器进程中,目的在于提取相关的补丁二进制代码,以生成补丁文件。而应用补丁库则需要加载到补丁服务器进程中去,其功能在于加载补丁文件,解析其内容并实施热补丁的工作。图1为根据本专利技术的不停服的热更新方法流程图,下面将参考图1,对本专利技术的不停服的热更新方法进行详细描述。首先,在步骤101,发现问题并上报给相关的开发部门。在步骤102,排查问题,确定问题出现的原因。在步骤103,打开当前有问题的线上服务器源代码工程(注意此处的的源代码必须和即将被补丁的服务器程序完全一致),编写修复问题的代码,并调用创建补丁库的相关接口。在步骤104,运行新的服务器程序,此时是工作在创建补丁模式下,创建补丁库会根据运行时的状态,自动创建应用于线上服务器的补丁文件。在步骤105,将生产的补丁文件交付给运维相关人员。在步骤106,运维按照预定的控制指令,控制线上服务器加载补丁文件。在步骤107,线上服务器中的应用补丁库加载补丁文件并hook相关函数的地址,使其跳转到新的补丁代码中,应用完成后输出提示信息以反馈给运维。在步骤108,公告问题得到修复。图2为根据本专利技术的创建补丁库和应用补丁库工作流程图,下面将参考图2,对本专利技术的创建补丁库和应用补丁库工作流程进行详细描述。首先,在步骤201,将需要进行热补丁的可执行文件静态加载应用补丁库。其中,应用补丁库的作用是提供一个Patch接口,以便程序在接收到应用补丁指令时加载补丁和应用补丁。另外,加载应用补丁库后,最终生成的可执行文件会有两个预留的内存页,一个内存页用于存放补丁数据,另外一个内存页用于存放补丁代码。在步骤202,修复可执行文件。具体为,在修复可执行文件时,不可直接修改原有的代码,修改方式为添加一个与原函数签名一致的新的函数,并在新的函数中修改存在的问题,新的函数编译后会存放在预留的代码内存页中。如需引入额外的全局变量,全局变量也须遵守与新的函数编写相同的规则,则全局变量会被存在放预留的数据内存页中。在步骤203,修复后的可执行文件调用创建补丁库的CreatePatch接口,指明要修复的函数所在模块,函数相对于模块基地址的偏移地址,以及新的函数地址。创建补丁库跟根据传入的信息生成一个自定义的补丁文件,记录这些信息。同时将预留的数据代码页和内存代码页的二进制数据存入补丁文件。在步骤204,使用补丁可执行文件中的新的函数替换原文件中的原函数。具体为,接收到需要应用补丁的指令后,调用应用补丁库的Patch接口,其会加载步骤203中所生产的补丁文件,将其中内存页和代码页装载到自身预留的内存页和代码页中,并解析其中的补丁信息,根据模块信息和相对偏移地址,重新计算出被补丁函数的地址,并将被补丁函数的前5个字节(32位程序)修改为一条jump指令,使其跳转到新的函数地址。至此,原函数的调用将全部被新的函数执行过程所取代。本专利技术的不停服的热更新方法,问题修复的整个过程中线上服务器一直处于工作状态,修复后的服务器将运行新的服务器代码。待到下一次游戏停服维护时可将线上服务器源码更新到修复后的状态,问题得到彻底修复。本领域普通技术人员可以理解:以上所述仅为本专利技术的优选实本文档来自技高网...

【技术保护点】
1.一种不停服的热更新方法,包括以下步骤:将需要进行热补丁的可执行文件静态加载应用补丁库;修复可执行文件;修复后的可执行文件调用创建补丁库的接口,指明要修复的函数所在模块、函数相对于模块基地址的偏移地址以及新的函数地址;使用补丁可执行文件中的新的函数替换原文件中的原函数。

【技术特征摘要】
1.一种不停服的热更新方法,包括以下步骤:将需要进行热补丁的可执行文件静态加载应用补丁库;修复可执行文件;修复后的可执行文件调用创建补丁库的接口,指明要修复的函数所在模块、函数相对于模块基地址的偏移地址以及新的函数地址;使用补丁可执行文件中的新的函数替换原文件中的原函数。2.根据权利要求1所述的不停服的热更新方法,其特征在于,所述将需要进行热补丁的可执行文件静态加载应用补丁库的步骤,进一步包括,加载应用补丁库,生成的可执行文件;所述可执行文件,包括两个预留的内存页,分别为用于存放补丁数据的内存页和用于存放补丁代码的内存页。3.根据权利要求1所述的不停服的热更新方法,其特征在于,所述修复可执行文件的步骤,进一步包括,在修复可执行文件时,添加一个与原函数签名一致的新的函数,并在新的函数中修改存在的问题,新添加的函数编译后存放在预留的代码内存页中。4.根据权利要求1所述的不停服的热更新方法,其特征在于,所述修复可执...

【专利技术属性】
技术研发人员:何雪松
申请(专利权)人:苏州蜗牛数字科技股份有限公司
类型:发明
国别省市:江苏,32

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

1