一种网络游戏服务器防崩溃方法和系统与流程

文档序号:12120263阅读:470来源:国知局
一种网络游戏服务器防崩溃方法和系统与流程

本发明涉及计算机领域,特别涉及一种网络游戏服务器防崩溃方法和系统。



背景技术:

在Linux系统进行游戏开发时,出于脚本稳定性的考虑,很多开发者会选择脚本语言作为游戏开发的主要语言,因为脚本语言支持热更的天然优势,使得即使游戏出现重大bug,开发者也能迅速解决,然而,当大量采用脚本语言时,却不得不面对脚本性能低下的问题,面对服务器性能要求特别高的游戏时,性能低下的脚本语言逻辑的体验相当差,玩家会在游戏过程中,感觉到明显的停顿感。而面对脚本语言的性能问题,现有技术却没有有效的解决办法;而由于C/C++自己本身语言的特性,使用C/C++来开发,可大大提高性能,但是如果程序不严谨的情况下,会发生系统崩溃,因为C/C++目前不存在热更新的接口,就需要重启服务器来实现错误更新,这对系统稳定性要求比较高的服务器来说,是难以接受的,每次的服务器进程崩溃带来的损失也非常大。



技术实现要素:

为此,需要提供一种网络游戏服务器防崩溃方法和系统,用以解决游戏开发使用C/C++语言,系统发生崩溃时需重启游戏服务器来更新错误的问题。

为实现上述目的,发明人提供了一种网络游戏服务器防崩溃方法,具体的技术方案如下:

一种网络游戏服务器防崩溃方法,包括步骤:注册接收Linux系统异常的处理函数;所述处理函数创建当前运行线程的内存对象,并打上标记;所述处理函数接收Linux系统异常信息,并检测所述异常信息对应的线程的内存对象,判断该线程的内存对象是否有被打上所述标记,若有,抛出所述处理函数自定义的异常信息并打印当前异常的堆栈信息;所述处理函数接收自定义的异常信息,并跳过异常逻辑,程序继续运行。

进一步的,为了快速定位出当前异常是由哪行代码引起的,帮助开发人员快速解决问题。打印当前异常的堆栈信息,还包括步骤:打印当前异常堆栈信息并产生对应日志,转换所述日志中打印的内存地址为代码中的行数,将生成的行数保存为一个文件,所述文件与所述日志一一对应。

进一步的,为了让程序继续正常运行。运行当前线程前,存储当前运行线程的运行堆栈。

进一步的,所述处理函数接收自定义的异常信息,并跳过异常逻辑,程序继续运行,还包括步骤:所述处理函数根据运行当前线程前存储当前运行线程的运行堆栈,执行下一步的业务逻辑。

进一步的,所述处理函数自定义的异常信息为IException类型。

为实现上述目的,发明人还提供了一种网络游戏服务器防崩溃系统,具体的技术方案如下:

一种网络游戏服务器防崩溃系统,包括:系统异常检测单元和系统异常处理单元;所述系统异常检测单元用于:注册接收Linux系统异常的处理函数;所述处理函数创建当前运行线程的内存对象,并打上标记;所述处理函数接收Linux系统异常信息,并检测所述异常信息对应的线程的内存对象,判断该线程的内存对象是否有被打上所述标记;所述系统异常处理单元用于:若线程的内存对象有被打上所述标记,抛出所述处理函数自定义的异常信息并打印当前异常的堆栈信息;还用于接收自定义的异常信息,并跳过异常逻辑,程序继续运行。

进一步的,所述系统异常处理单元还用于:打印当前异常堆栈信息并产生对应日志,转换所述日志中打印的内存地址为代码中的行数,将生成的行数保存为一个文件,所述文件与所述日志一一对应。

进一步的,所述系统异常检测单元还用于:运行当前线程前,存储当前运行线程的运行堆栈。

进一步的,所述系统异常处理单元还用于:根据运行当前线程前存储当前运行线程的运行堆栈,执行下一步的业务逻辑。

进一步的,所述处理函数自定义的异常信息为IException类型。

本发明的有益效果是:开发人员自己研发了处理函数,其会给每个当前运行线程打上特定标记,当有系统异常发生时,会捕获系统异常,当判断到是程序本身引发的系统异常时,会对系统异常堆栈信息进行记录,以方便开发人员查找错误情况;并且会抛出处理函数自己定义的异常信息,处理函数接收到自己的异常信息,就会让程序跳过异常点,继续正常运行的机制,确保了系统稳定性,避免服务器进程崩溃。解决了系统异常发生时,就必须重启服务器解决问题的情况。同时通过对运行线程进行标记,也避免了误报非本程序引发系统异常的情况。

附图说明

图1为本发明一种网络游戏服务器防崩溃方法的流程图一;

图2为本发明一种网络游戏服务器防崩溃方法的流程图二;

图3为本发明一种网络游戏服务器防崩溃系统的模块图。

附图标记说明:

301、系统异常检测单元,

302、系统异常处理单元。

具体实施方式

为详细说明技术方案的技术内容、构造特征、所实现目的及效果,以下结合具体实施例并配合附图详予说明。

首先对一些名词做下解释:

try{}catch{}逻辑:在try{}语句执行的过程中,如果接收到catch{}里的异常,就会跳出try方法。

在本实施例中,为了使用方便,定义了两个别名DEBUG_TRY和DEBUG_CATCH,其中DEBUG_CATCH就是用来捕捉异常

请参阅图1,本实施例中一种网络游戏服务器防崩溃方法的实现具体如下:

步骤S101:注册接收Linux系统异常的处理函数;首先在程序启动时,发明人先定义好接收Linux系统异常的处理函数。

定义好后,进入步骤S102:处理函数创建当前运行线程的内存对象,并打上印记。这边打印记是为了确保后续接收到系统发生异常时,可以通过判断线程的内存对象是否有我们打上的印记来判断是否为本程序引发的系统异常,使得异常接收和处理更有针对性。

打好印记后,就开始正常运行业务逻辑,当有系统异常发生时,进入步骤S103:处理函数接收系统异常信息。

接收后,进入步骤S104:判断线程的内存对象是否有被打上所述标记;因为系统发生异常由可能不是由本程序引起的,可能是其它程序引发,也有可能是系统自己本身的问题,因此需要对线程内存对象进行判断,如果有打上所述标记,就说明是本程序的运行线程。

所以如果判断到有打上标记,进入步骤S105:抛出所述处理函数自定义的异常信息并打印当前异常的堆栈信息;处理函数自定义了异常信息,在接收到本程序引发的系统异常的时候,都会抛出处理函数自定义的异常信息,在本实施例中,所述处理函数自定义的异常信息为IException类型。并且打印当前异常的堆栈信息,便于后续对异常信息进行分析解决。如果判断到没有打上标记,则说明是系统自己本身的错误,非本程序出错,程序直接崩溃,不做任何处理。

在某些实施例中,可以根据接收到的系统异常的错误类型,抛出不同的错误级别,程序根据错误级别,做出不同的应对。比如对错误级别可以进行分类为:一般错误级别和严重错误级别;如果接受到的是普通的错误级别,除了打印日志,不做其他任何处理;如果是严重的错误级别,除了打印日志,程序还会直接让触发错误的玩家下线。通过这样的级别判断,针对性处理,不仅可以节省计算机资源,而且可以避免玩家不知情情况下继续重复一些严重的错误给服务器带来一些大的攻击影响。

抛出自己的异常信息后,进入步骤S106:处理函数接收自定义的异常信息,并跳过异常逻辑,程序继续运行。本实施例中采用的是try{}和catch{}逻辑,当抛出程序自定义的异常信息时,就会被DEBUG_CATCH接收到,然后就会直接跳到DEBUG_CATCH之后,程序继续正常运行。

整个过程中,处理函数,其会给每个当前运行线程打上特定标记,当有系统异常发生时,会捕获系统异常,当判断到是程序本身引发的系统异常时,会对系统异常堆栈信息进行记录,以方便开发人员查找错误情况;并且会抛出处理函数自己定义的异常信息,处理函数接收到自己的异常信息,就会让程序跳过异常点,继续正常运行的机制,确保了系统稳定性,避免服务器进程崩溃。解决了系统异常发生时,就必须重启服务器解决问题的情况。同时通过对运行线程进行标记,也避免了误报非本程序引发系统异常的情况。

在本实施例中,为了方便开发人员对引发系统异常原因进行快速定位分析。在步骤S201:打印当前异常堆栈信息并产生对应日志;比如在2016-10-28:15:58这个时间发生了系统异常,程序会打印当前异常堆栈信息,并生成对应日志,在本实施例中,日志以发生的时间命名。

生成对应日志后,进入步骤S202:转换所述日志中打印的内存地址为代码中的行数;日志中打印的内存地址,可被直接转换为代码中的行数,这样便于查找逻辑代码的崩溃点。

并且在步骤S203:将生成的行数保存为一个文件;程序会自动生成一个文件,用来存放这所有的行数。文件中在每一行内存地址的后面,增加了本行内存地址对应的逻辑代码行号,这样程序员就可以快速的找到程序崩溃的行数,查询崩溃原因。

在某些实施例中,为了让程序即便在遇到系统异常时,也可以继续执行,会在运行当前线程前,存储当前运行线程的运行堆栈。这样异常发生时,仍然可以依据当前运行线程的运行堆栈来找到下一步要执行的业务逻辑,让程序继续运行。

在某些实施例中,一种网络游戏服务器防崩溃系统,包括:系统异常检测单元301和系统异常处理单元302;所述系统异常检测单元301用于:注册接收Linux系统异常的处理函数;所述处理函数创建当前运行线程的内存对象,并打上标记;所述处理函数接收Linux系统异常信息,并检测所述异常信息对应的线程的内存对象,判断该线程的内存对象是否有被打上所述标记;所述系统异常处理单元302用于:若线程的内存对象有被打上所述标记,抛出所述处理函数自定义的异常信息并打印当前异常的堆栈信息;还用于接收自定义的异常信息,并跳过异常逻辑,程序继续运行。

所述系统异常处理单元302还用于:打印当前异常堆栈信息并产生对应日志,转换所述日志中打印的内存地址为代码中的行数,将生成的行数保存为一个文件,所述文件与所述日志一一对应。

所述系统异常检测单元301还用于:运行当前线程前,存储当前运行线程的运行堆栈。

所述系统异常处理单元302还用于:根据运行当前线程前存储当前运行线程的运行堆栈,执行下一步的业务逻辑。

所述处理函数自定义的异常信息为IException类型。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括……”或“包含……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的要素。此外,在本文中,“大于”、“小于”、“超过”等理解为不包括本数;“以上”、“以下”、“以内”等理解为包括本数。

本领域内的技术人员应明白,上述各实施例可提供为方法、装置、或计算机程序产品。这些实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。上述各实施例涉及的方法中的全部或部分步骤可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机设备可读取的存储介质中,用于执行上述各实施例方法所述的全部或部分步骤。所述计算机设备,包括但不限于:个人计算机、服务器、通用计算机、专用计算机、网络设备、嵌入式设备、可编程设备、智能移动终端、智能家居设备、穿戴式智能设备、车载智能设备等;所述的存储介质,包括但不限于:RAM、ROM、磁碟、磁带、光盘、闪存、U盘、移动硬盘、存储卡、记忆棒、网络服务器存储、网络云存储等。

上述各实施例是参照根据实施例所述的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到计算机设备的处理器以产生一个机器,使得通过计算机设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机设备以特定方式工作的计算机设备可读存储器中,使得存储在该计算机设备可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机设备上,使得在计算机设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已经对上述各实施例进行了描述,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改,所以以上所述仅为本发明的实施例,并非因此限制本发明的专利保护范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1