CN111841019A - 游戏应用安全验证方法、装置、设备及存储介质 - Google Patents
游戏应用安全验证方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN111841019A CN111841019A CN202010585308.2A CN202010585308A CN111841019A CN 111841019 A CN111841019 A CN 111841019A CN 202010585308 A CN202010585308 A CN 202010585308A CN 111841019 A CN111841019 A CN 111841019A
- Authority
- CN
- China
- Prior art keywords
- game
- core
- user operation
- result
- sequence frame
- 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.)
- Pending
Links
Images
Classifications
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/70—Game security or game management aspects
- A63F13/75—Enforcing rules, e.g. detecting foul play or generating lists of cheating players
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F2300/00—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
- A63F2300/50—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by details of game servers
- A63F2300/55—Details of game data or player data management
- A63F2300/5586—Details of game data or player data management for enforcing rights or rules, e.g. to prevent foul play
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Business, Economics & Management (AREA)
- Computer Security & Cryptography (AREA)
- General Business, Economics & Management (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本公开提供一种游戏应用安全验证方法、装置、设备及存储介质,涉及计算机领域。该方法包括:游戏服务进程获取游戏应用客户端的用户操作序列以生成用户操作序列帧;所述游戏服务进程分发所述用户操作序列帧以便游戏核心运算进程获得所述用户操作序列帧;所述游戏服务进程接收来自所述游戏核心运算进程的所述用户操作序列帧的第一运算结果;所述游戏服务进程接收来自所述客户端的所述用户操作序列帧的第二运算结果;所述游戏服务进程通过所述第一运算结果对所述第二运算结果进行验证。该方法实现了在不影响游戏设计的情况下一定程度上提高游戏安全验证的准确度及效率,基于容器技术可进一步实现版本更新时的资源调配。
Description
技术领域
本公开涉及计算机领域,具体而言,涉及一种游戏应用安全验证方法、装置、设备及可读存储介质。
背景技术
随着电子游戏产业的迅猛发展,电子游戏成为了人们常用的一种娱乐休闲方式。随着电子游戏产品越来越丰富,用户越来越多,如何维护住用户就成了电子游戏产业发展的重要问题之一,而维护游戏的公平性是能够维护住用户群体的关键。对于游戏公平性的维护的一种方式就是防止玩家在游戏中作弊,防作弊的方法可以是对玩家在游戏应用上的操作进行校验。
在基于帧同步技术的电子游戏中,采用客户端上行操作序列帧的方式,服务器端按固定频率收集用户的操作序列帧后分帧下发给客户端,然后客户端对用户的操作序列帧进行逻辑运算,客户端将逻辑运算结果上报给服务器并在自身表现给玩家,由客户端保证运算结果的一致性,其数据请求流程时序如图1所示。针对帧同步游戏的作弊工具通常对客户端应用程序的运算逻辑进行篡改,如修改本地数据(例如人物的攻击力、攻击速度、护甲、血量等等)、钩(Hook)一些调用函数伪造逻辑运算结果等。
如上所述,如何提供不影响游戏设计、准确度较高的游戏安全验证方案成为亟待解决的问题。
在所述背景技术部分公开的上述信息仅用于加强对本公开的背景的理解,因此它可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本公开的目的在于提供一种游戏应用安全验证方法、装置、设备及可读存储介质,至少一定程度上提高不影响游戏设计的游戏安全验证方案的准确度。
本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。
根据本公开的一方面,提供一种游戏应用安全验证方法,包括:游戏服务进程获取游戏应用客户端的用户操作序列帧;所述游戏服务进程分发所述用户操作序列帧以便游戏核心运算进程获得所述用户操作序列帧;所述游戏服务进程接收来自所述游戏核心运算进程的所述用户操作序列帧的第一运算结果;所述游戏服务进程接收来自所述客户端的所述用户操作序列帧的第二运算结果;所述游戏服务进程通过所述第一运算结果对所述第二运算结果进行验证。
根据本公开的一实施例,所述游戏服务进程分发所述用户操作序列帧以便游戏核心运算进程获得所述用户操作序列帧包括:所述游戏服务进程将所述用户操作序列帧发送至请求消息队列;所述游戏核心运算进程从所述请求消息队列获取所述用户操作序列帧;所述游戏服务进程接收来自所述游戏核心运算进程的所述用户操作序列帧的第一运算结果包括:所述游戏服务进程通过结果消息队列接收来自所述游戏核心运算进程的所述第一运算结果。
根据本公开的一实施例,所述游戏服务进程将所述用户操作序列帧发送至请求消息队列包括:所述游戏服务进程通过中转服务将所述用户操作序列帧发送至所述请求消息队列;所述游戏核心运算进程从所述请求消息队列获取所述用户操作序列帧包括:所述游戏核心运算进程通过游戏核心代理进程从所述请求消息队列获取所述用户操作序列帧;所述游戏服务进程通过结果消息队列接收来自所述游戏核心运算进程的所述第一运算结果包括:所述游戏服务进程通过结果消息队列经由所述中转服务接收来自所述游戏核心运算进程通过所述游戏核心代理进程发送的所述第一运算结果。
根据本公开的一实施例,所述游戏核心代理进程与所述游戏核心运算进程运行在同一容器中;所述游戏核心运算进程通过游戏核心代理进程从所述请求消息队列获取所述用户操作序列帧包括:所述游戏核心运算进程通过所述游戏核心代理进程根据订阅的标识从所述请求消息队列中获取所述用户操作序列帧。
根据本公开的一实施例,所述游戏核心运算进程包括第一版本的游戏核心运算进程和第二版本的游戏核心运算进程;所述游戏核心代理进程包括第一版本的游戏核心代理进程和第二版本的游戏核心代理进程;其中,所述第一版本的游戏核心运算进程与所述第一版本的游戏核心代理进程运行在第一容器中,所述第二版本的游戏核心运算进程与所述第二版本的游戏核心代理进程运行在第二容器中,所述第一容器与所述第二容器共享运行所需的资源。
根据本公开的一实施例,所述方法还包括:所述游戏核心运算进程通过异常检测命令在运行异常时结束进程;所述容器的编排引擎在检测到所述游戏核心运算进程结束时结束运行在所述容器中的进程。
根据本公开的一实施例,所述方法还包括:所述游戏核心代理进程向所述游戏核心运算进程发送检测请求;所述游戏核心代理进程在预定时间内未收到所述游戏核心运算进程对于所述检测请求的响应时生成异常报告文件;所述容器的编排引擎在通过健康检测命令检测到所述异常报告文件时结束运行在所述容器中的进程。
根据本公开的一实施例,所述游戏服务进程获取游戏应用客户端的用户操作序列以生成用户操作序列帧包括:所述游戏服务进程获取游戏应用多个客户端的用户操作序列;所述游戏服务进程以预定时间间隔对所述多个客户端的用户操作序列进行分帧获得所述用户操作序列帧;所述方法还包括:所述游戏服务进程将所述用户操作序列帧分别发送至所述多个客户端;所述游戏服务进程接收来自所述客户端的所述用户操作序列帧的第二运算结果包括:所述游戏服务进程接收来自所述多个客户端的多个第二运算结果;所述游戏服务进程通过所述第一运算结果对所述第二运算结果进行验证包括:所述游戏服务进程将所述多个第二运算结果分别与所述第一运算结果进行比较,在判定与所述第一运算结果不一致时向对应的客户端发送验证失败信息。
根据本公开的再一方面,提供一种游戏应用安全验证装置,包括:操作获取模块,用于游戏服务进程获取游戏应用客户端的用户操作序列以生成用户操作序列帧;操作分发模块,用于所述游戏服务进程分发所述用户操作序列帧以便游戏核心运算进程获得所述用户操作序列帧;结果验证模块,用于所述游戏服务进程接收来自所述游戏核心运算进程的所述用户操作序列帧的第一运算结果;结果验证模块,还用于所述游戏服务进程接收来自所述客户端的所述用户操作序列帧的第二运算结果;结果验证模块,还用于所述游戏服务进程通过所述第一运算结果对所述第二运算结果进行验证。
根据本公开的一实施例,所述操作分发模块,还用于所述游戏服务进程将所述用户操作序列帧发送至请求消息队列;所述装置还包括结果运算模块,所述结果运算模块用于所述游戏核心运算进程从所述请求消息队列获取所述用户操作序列帧;所述结果验证模块,还用于所述游戏服务进程通过结果消息队列接收来自所述游戏核心运算进程的所述第一运算结果。
根据本公开的一实施例,所述操作分发模块,还用于所述游戏服务进程通过中转服务将所述用户操作序列帧发送至所述请求消息队列;所述结果运算模块,还用于所述游戏核心运算进程通过游戏核心代理进程从所述请求消息队列获取所述用户操作序列帧;所述结果验证模块,还用于所述游戏服务进程通过结果消息队列经由所述中转服务接收来自所述游戏核心运算进程通过所述游戏核心代理进程发送的所述第一运算结果。
根据本公开的一实施例,所述游戏核心代理进程与所述游戏核心运算进程运行在同一容器中;所述结果运算模块,还用于所述游戏核心运算进程通过所述游戏核心代理进程根据订阅的标识从所述请求消息队列中获取所述用户操作序列帧。
根据本公开的一实施例,所述游戏核心运算进程包括第一版本的游戏核心运算进程和第二版本的游戏核心运算进程;所述游戏核心代理进程包括第一版本的游戏核心代理进程和第二版本的游戏核心代理进程;其中,所述第一版本的游戏核心运算进程与所述第一版本的游戏核心代理进程运行在第一容器中,所述第二版本的游戏核心运算进程与所述第二版本的游戏核心代理进程运行在第二容器中,所述第一容器与所述第二容器共享运行所需的资源。
根据本公开的一实施例,所述结果运算模块,还用于所述游戏核心运算进程通过异常检测命令在运行异常时结束进程;所述装置还包括异常检测模块,所述异常检测模块用于所述容器的编排引擎在检测到所述游戏核心运算进程结束时结束运行在所述容器中的进程。
根据本公开的一实施例,所述结果运算模块,还用于所述游戏核心代理进程向所述游戏核心运算进程发送检测请求;所述游戏核心代理进程在预定时间内未收到所述游戏核心运算进程对于所述检测请求的响应时生成异常报告文件;所述异常检测模块,还用于所述容器的编排引擎在通过健康检测命令检测到所述异常报告文件时结束运行在所述容器中的进程。
根据本公开的一实施例,所述操作获取模块,还用于所述游戏服务进程获取游戏应用多个客户端的用户操作序列;所述操作分发模块,还用于所述游戏服务进程以预定时间间隔对所述多个客户端的用户操作序列进行分帧获得所述用户操作序列帧;所述游戏服务进程将所述用户操作序列帧分别发送至所述多个客户端;所述结果验证模块,还用于所述游戏服务进程接收来自所述多个客户端的多个第二运算结果;所述游戏服务进程将所述多个第二运算结果分别与所述第一运算结果进行比较,在判定与所述第一运算结果不一致时向对应的客户端发送验证失败信息。
根据本公开的再一方面,提供一种设备,包括:存储器、处理器及存储在所述存储器中并可在所述处理器中运行的可执行指令,所述处理器执行所述可执行指令时实现如上述任一种方法。
根据本公开的再一方面,提供一种计算机可读存储介质,其上存储有计算机可执行指令,所述可执行指令被处理器执行时实现如上述任一种方法。
本公开的实施例提供的游戏应用安全验证方法,通过游戏服务进程获取游戏应用客户端的用户操作序列以生成并分发用户操作序列帧以便游戏核心运算进程获得用户操作序列帧,游戏服务进程接收来自游戏核心运算进程的用户操作序列帧的第一运算结果以及来自客户端的用户操作序列帧的第二运算结果,然后游戏服务进程通过第一运算结果对第二运算结果进行验证,从而可在不影响游戏设计的情况下一定程度上提高游戏安全验证的准确度和效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本公开。
附图说明
通过参照附图详细描述其示例实施例,本公开的上述和其它目标、特征及优点将变得更加显而易见。
图1示出帧同步技术中一种数据请求流程时序图。
图2示出本公开实施例中一种系统结构的示意图。
图3A示出本公开实施例中一种游戏应用安全验证方法的流程图。
图3B示出本公开实施例中一种游戏应用的场景示意图。
图4示出了图3A中所示的步骤S304在一实施例中的处理过程示意图。
图5A是根据一示例性实施例示出的一种预定版本游戏应用安全验证方法的流程图。
图5B根据一示例性实施例示出的一种消息队列数据传输模式示意图。
图6是根据一示例性实施例示出的另一种游戏应用安全验证方法的流程图。
图7是根据图5A至图6示出的一种游戏应用安全验证处理流程示意图。
图8是根据图7示出的一种游戏应用安全验证处理时序示意图。
图9是根据图6至图8示出的一种游戏客户端界面示意图。
图10是根据一示例性实施例示出的一种游戏应用安全验证方案架构图。
图11A至图11B是根据一示例性实施例示出的一种新版本客户端上线时游戏核心运算进程的资源调配方法的示意图。
图12是根据一示例性实施例示出的一种异常检测方法的流程图。
图13是根据一示例性实施例示出的另一种异常检测方法的流程图。
图14是根据一示例性实施例示出的一种游戏应用安全验证装置的框图。
图15是根据一示例性实施例示出的另一种游戏应用安全验证装置的框图。
图16示出本公开实施例中一种电子设备的结构示意图。
具体实施方式
现在将参考附图更全面地描述示例实施例。然而,示例实施例能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施例使得本公开将更加全面和完整,并将示例实施例的构思全面地传达给本领域的技术人员。附图仅为本公开的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本公开的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方法、装置、步骤等。在其它情况下,不详细示出或描述公知结构、方法、装置、实现或者操作以避免喧宾夺主而使得本公开的各方面变得模糊。
此外,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本公开的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
在本公开中,除非另有明确的规定和限定,“连接”等术语应做广义理解,例如,可以是电连接或可以互相通讯;可以是直接相连,也可以通过中间媒介间接相连。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本公开中的具体含义。
云计算(Cloud Computing)指IT基础设施的交付和使用模式,指通过网络以按需、易扩展的方式获得所需资源;广义云计算指服务的交付和使用模式,指通过网络以按需、易扩展的方式获得所需服务。这种服务可以是IT和软件、互联网相关,也可是其他服务。云计算是网格计算(Grid Computing)、分布式计算(DistributedComputing)、并行计算(Parallel Computing)、效用计算(Utility Computing)、网络存储(Network StorageTechnologies)、虚拟化(Virtualization)、负载均衡(Load Balance)等传统计算机和网络技术发展融合的产物。
随着互联网、实时数据流、连接设备多样化的发展,以及搜索服务、社会网络、移动商务和开放协作等需求的推动,云计算迅速发展起来。不同于以往的并行分布式计算,云计算的产生从理念上将推动整个互联网模式、企业管理模式发生革命性的变革。
本公开提供了一种游戏应用安全验证方法,通过游戏服务进程获取游戏应用客户端的用户操作序列以生成并分发用户操作序列帧以便游戏核心运算进程获得用户操作序列帧,游戏服务进程接收来自游戏核心运算进程的用户操作序列帧的第一运算结果以及来自客户端的用户操作序列帧的第二运算结果,然后游戏服务进程通过第一运算结果对第二运算结果进行验证,从而可在不影响游戏设计的情况下一定程度上提高游戏安全验证的准确度及效率。
图2示出了可以应用本公开的游戏应用安全验证方法、装置的示例性系统架构20。
如图2所示,系统架构20可以包括终端设备202、网络204、和服务器206。终端设备202可以是具有显示屏并且支持输入、输出的各种电子设备,包括但不限于智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表、可穿戴设备、虚拟现实设备、智能家居等等,但并不局限于此。终端设备202以及服务器206可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。网络204用以在终端设备202和服务器206之间提供通信链路的介质。网络204可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。服务器206可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云计算服务的云服务器。
用户可以使用终端设备202通过网络204与服务器206交互,以接收或发送数据等。例如游戏玩家使用终端设备202上的游戏应用程序通过网络204向服务器206发送游戏操作,然后终端设备202通过网络204接收游戏服务器206发送的各玩家的操作序列帧。又例如终端设备202通过网络204将其运算的各玩家的操作序列帧的运算结果发送至游戏服务器206以便验证。
各服务器206之间也可通过网络204互相收发数据等。例如服务器206可为游戏应用程序服务器,用于通过网络204从终端设备202获取的各玩家的操作序列帧和各终端设备202的运算结果,然后游戏应用程序服务器通过代理服务器206从游戏验证处理服务器集群206获取游戏验证处理服务器对各玩家的操作序列帧进行运算的结果,以便进行验证。
应该理解,图2中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
图3A是根据一示例性实施例示出的一种游戏应用安全验证方法的流程图。如图3A所示的方法例如可以应用于上述系统的服务器。
参考图3A,本公开实施例提供的方法30可以包括以下步骤。
在步骤S302中,游戏服务进程获取游戏应用客户端的用户操作序列以生成用户操作序列帧。服务器端运行单局游戏的游戏服务进程,该游戏服务进程按固定频率收集本局中客户端发起的用户操作序列并生成用户操作序列帧,以将获取到的全部用户操作请求进行汇总。玩家可通过客户端的游戏应用程序输入用户操作,例如选择用于本局参与战斗的英雄、确定战斗阵型、可参与战斗的人口等等。
在步骤S304中,游戏服务进程分发用户操作序列帧以便游戏核心运算进程获得用户操作序列帧。游戏服务进程向服务器端的游戏核心运算进程发起仲裁请求,即可将汇总的本局中客户端的用户操作序列直接发送给该局游戏的游戏核心运算进程。在基于帧同步技术的游戏中,客户端游戏应用程序包含用于运算用户操作序列帧的游戏核心运算程序,可通过客户端游戏应用程序编译并导出游戏核心运算程序的可执行文件,以将游戏核心运算程序运行在服务器端成为游戏核心运算进程。游戏服务进程还可在每局收集用户操作序列之后,按固定时间间隔分帧获得用户操作序列帧并下发给客户端,以便客户端对该局用户操作进行运算并表现。
在一些实施例中,以游戏《战歌竞技场》为例,如图3B所示,图3B示出了《战歌竞技场》的场景示意图,玩家通过客户端可将选择用于本局参与战斗的英雄,并将其放置在棋盘中以进行布阵。《战歌竞技场》服务器端运行的游戏服务进程接收本局战斗中各个玩家在各自客户端的布阵操作,生成用户操作序列帧,并发送给游戏核心运算进程。《战歌竞技场》为基于帧同步技术的电子游戏,游戏应用客户端包含用于运算用户操作序列帧的游戏核心运算程序。根据本公开的安全验证方法,可将从《战歌竞技场》客户端应用程序编译并导出游戏核心运算程序的可执行文件,并在《战歌竞技场》服务器端运行该可执行文件,即在《战歌竞技场》游戏服务进程开启时也运行游戏核心运算程序,并保持开启游戏核心运算进程,以便在接收到游戏服务进程发送的安全验证请求(包括用户操作序列帧)时,对用户操作序列帧进行逻辑运算,如根据对局中的各玩家布置的英雄类型(如野兽、潜行者等)、属性(如攻击力、生命值等)、装备(如蓝宝石合成、潜行者之剑等)、阵型(如羁绊等)等,运算该局战斗的胜方和负方等等。
在步骤S306中,游戏服务进程接收来自游戏核心运算进程的用户操作序列帧的第一运算结果。服务器端的游戏核心运算进程接收到仲裁请求,即单局中客户端的用户操作序列帧后,对其中的用户操作进行运算获得第一运算结果,然后可将第一运算结果直接返回给游戏服务进程。
在一些实施例中,用户操作序列帧的运算结果例如可为单局游戏的结果,如玩家在本局战斗中的胜负,也可为游戏过程当中的中间结果,例如可为玩家的生命值损失量、造成对方(例如可为对战玩家、人工智能(AI)对手等等)的伤害值等等。
在步骤S308中,游戏服务进程接收来自客户端的用户操作序列帧的第二运算结果。客户端接收游戏服务进程下发的用户操作序列帧之后,对其中用户操作进行运算获得第二运算结果,然后将第二运算结果上行发送至游戏服务进程。步骤S308与步骤S306的先后顺序与游戏服务进程下发用户操作序列帧的分帧间隔、游戏核心运算进程的运算用户操作的处理时间等因素相关,在此不作限制。
在步骤S310中,游戏服务进程通过第一运算结果对第二运算结果进行验证。游戏服务进程根据服务器端的游戏核心运算进程运算得到的第一运算结果对客户端的第二运算结果进行验证。
在一些实施例中,例如,在PVP游戏中,游戏服务进程将对战各方的客户端的第二运算结果分别与第一运算结果进行比较验证,若发现其中某个客户端的第二运算结果与第一运算结果不一致时判定该客户端作弊,例如在一局游戏中玩家A对战玩家B,玩家A客户端的第二运算结果为玩家A胜,游戏核心运算进程运算得到的第一运算结果为玩家B胜,则玩家A客户端验证失败,判定玩家A作弊。
在另一些实施例中,例如,在PVE游戏中,游戏服务进程将与副本对战的团队中各玩家的客户端的第二运算结果分别与第一运算结果进行比较验证,若发现某个客户端的第二运算结果与第一运算结果不一致时判定该客户端作弊,例如可能发现团队中各个客户端的第二运算结果与第一运算结果都不一致,则判定团队中所有玩家都作弊。
根据本公开实施例提供的游戏应用安全验证方法,游戏服务进程获取游戏应用客户端的用户操作序列以生成并分发用户操作序列帧以便游戏核心运算进程获得用户操作序列帧,游戏服务进程接收来自游戏核心运算进程的用户操作序列帧的第一运算结果以及来自客户端的用户操作序列帧的第二运算结果,然后游戏服务进程通过第一运算结果对第二运算结果进行验证,通过游戏服务进程和游戏核心运算进程配合实现同步验证,从而可在不影响游戏设计的情况下一定程度上提高游戏安全验证的准确度及效率。
图4是根据一示例性实施例示出的另一种游戏应用安全验证方法的流程图。如图4所示的方法例如可以应用于上述系统的服务器。图4与图3A的不同之处在于,如图4所示,本公开实施例中,上述步骤S304可以进一步包括以下步骤。
在步骤S3042中,游戏服务进程将用户操作序列帧发送至请求消息队列。消息系统可通过暂存消息为消息队列将数据从一个应用程序进程传递到另外一个应用程序进程,游戏服务进程的用户操作序列帧验证请求数据发送给消息队列之后,消息队列服务器可立即返回请求响应,再由消息队列的消费者进程即游戏核心运算进程从消息队列中获取用户操作序列帧,异步对用户操作进行运算,通过异步处理可将短时间高并发产生的事务消息存储在消息队列中,从而避免游戏核心运算进程短时间接收大量运算请求,削平高峰期的并发事务。
在一些实施例中,游戏服务进程通过中转服务将用户操作序列帧发送至请求消息队列。例如,中转服务可通过代理(Proxy)模式实现,通过将游戏服务的通信协议转换为管理请求消息队列的分布式消息系统的通信协议,提供一个代理以控制游戏服务进程对请求消息队列的访问,以解耦游戏服务与消息队列,可隐藏消息系统、保护游戏服务,例如在消息系统崩溃时可暂不影响游戏服务进程发送用户操作序列帧;同时也为实施不同控制策略预留了空间,例如便于更换分布式消息系统的类型等等,从而提高了架构设计的灵活性。
在步骤S3044中,游戏核心运算进程从请求消息队列获取用户操作序列帧。在一些实施例中,例如,消息队列可采用点对点传递模式,点对点模式下包括三个角色:消息队列、发送者(生产者,可对应于本申请游戏服务进程)、接收者(消费者,例如可对应于本申请游戏核心运算进程)。消息发送者生产消息,例如用户操作序列帧,发送到消息队列中,然后消息接收者从消息队列中取出用户操作序列帧并且对用户操作进行运算。
在一些实施例中,例如,消息队列可采用发布-订阅模式,该模式的具体实施方式可参照图5A和图5B,此处不予详述。
在一些实施例中,例如,游戏核心运算进程通过游戏核心代理进程从请求消息队列获取所述用户操作序列帧。游戏核心代理通过通信控制协议(tcp)与游戏核心运算进程通信为其提供代理服务,可用于游戏核心运算进程与分布式消息系统之间的双向通信。
图4与图3A的不同之处还在于,上述步骤S306可进一步包括以下步骤。
在步骤S3062中,游戏服务进程通过结果消息队列接收来自游戏核心运算进程的第一运算结果。分布式消息系统可管理多个消息队列,请求消息队列与结果消息队列的通信方向相反源消息队列,作为游戏服务进程和仲裁服务游戏核心运算进程中间的消息通道。游戏核心运算进程返回第一运算结果时,也可先将第一运算结果发送至结果消息队列,经由中转服务发送至游戏服务进程用于对比验证。
在一些实施例中,游戏服务进程通过结果消息队列经由中转服务接收来自游戏核心运算进程通过游戏核心代理进程发送的第一运算结果。
根据本公开实施例提供的方法,游戏服务进程经由中转服务通过消息队列将用户操作序列帧发送游戏核心代理进程,游戏核心运算进程通过游戏核心代理进程从请求消息队列获取用户操作序列帧,将短时间高并发产生的验证请求存储在消息队列中以实现异步验证,避免游戏核心运算进程短时间接收大量运算请求导致系统崩溃;通过中转/代理服务在游戏服务进程与消息队列之间、消息队列与游戏核心代理进程之间双向通信,实现了模块之间的解耦,提高了系统的可扩展性和模块的可替换性。
图5A是根据一示例性实施例示出的一种预定版本游戏应用安全验证方法的流程图。如图5A所示的方法例如可以应用于上述系统的服务器。
参考图5A,本公开实施例提供的方法50可以包括以下步骤。
在步骤S502中,游戏服务进程获取预定版本的游戏应用客户端的用户操作序列帧。在游戏的运营过程中,会持续进行发布更新,客户端的游戏应用程序的版本也会进行更新。在帧同步的技术方案中,要求在同一局游戏中的所有用户需要采用相同的版本客户端,否则会出现运算结果不一致的情况。因此同一局游戏的用户操作序列帧为在同一版本客户端上进行的用户操作。
在步骤S504中,游戏服务进程通过中转服务将用户操作序列帧发送至预定版本的请求消息队列。可采用发布-订阅模式的消息队列实现用户操作序列帧的暂存功能,发布-订阅模式下包括三个角色:角色主题(Topic,不同的Topic对应为本申请不同的预定版本)、发布者(对应为本申请游戏服务进程)、订阅者(对应为本申请不同的预定版本的游戏核心运算进程)。发布者将用户操作序列帧发送到对应Topic的消息队列,消息系统根据Topic将这些消息传递给对应的订阅者。
在步骤S506中,预定版本的游戏核心运算进程通过预定版本的游戏核心代理进程根据订阅的预定版本的标识从预定版本的请求消息队列中获取用户操作序列帧。预定版本的游戏核心运算进程为了接收到在预定版本客户端操作的用户操作序列帧,与其相连接预定版本的游戏核心代理需要提前订阅该Topic,并保持其进程在线运行。如图5B所示,图5B为发布-订阅模式下消息队列消息传递过程示意图,游戏服务(5002)进程生产用户操作序列帧暂存于多个Topic的消息队列(5004)中以发送给消费者(5006),消费者(5006)中各个版本的游戏核心代理订阅对应Topic的消息队列的用户操作序列帧,各个版本的游戏核心运算进程通过对应的游戏核心运算进程接收用户操作序列帧。
在步骤S508中,游戏服务进程通过结果消息队列经由中转服务接收来自预定版本的游戏核心运算进程的用户操作序列帧的第一运算结果。预定版本客户端对应预定版本的游戏核心运算程序。由于结果消息队列的生产者为游戏核心运算进程,消费者为游戏服务进程,游戏服务的通过第一运算结果对第二运算结果进行验证的程序不需要按照不同版本分别部署,因此可采用点对点模式的消息队列,每个版本的游戏核心运算程序将第一运算结果发送给一个消息队列后,游戏服务进程经由中转服务从该消息队列接收第一运算结果。
在步骤S510中,游戏服务进程接收来自预定版本的客户端的用户操作序列帧的第二运算结果。
在步骤S512中,游戏服务进程通过第一运算结果对第二运算结果进行验证。类似步骤S306与步骤S308,步骤S510与步骤S512的先后顺序也不作限制。
根据本公开实施例提供的方法,通过游戏服务进程经由中转服务通过预定版本请求消息队列将用户操作序列帧发送预定版本游戏核心代理进程,预定版本游戏核心运算进程通过该游戏核心代理进程订阅预定版本用户操作序列帧进行运算后,将第一运算结果再经由该游戏核心代理通过消息队列返回游戏服务进程,实现了不同版本客户端的用户操作的验证。
图6是根据一示例性实施例示出的另一种游戏应用安全验证方法的流程图。如图6所示的方法例如可以应用于上述系统的服务器。与图3A相比图6的不同之处在于,图6中的游戏应用客户端为多个客户端。
参考图6,本公开实施例提供的方法60可以包括以下步骤。
在步骤S602中,游戏服务进程接收游戏应用多个客户端各自发送的用户操作序列。在游戏服务进程收集客户端的上行数据中,可包括多个客户端的操作。例如PVP游戏中,多个客户端的操作可为对战双方的操作,如各方选择的战斗英雄、阵型选择等等;又例如PVE游戏中,挑战副本的团队中各个队员的操作等。
在步骤S603中,游戏服务进程以预定时间间隔对多个客户端的用户操作序列进行分帧获得用户操作序列帧。游戏服务进程在接收用户操作序列之后,按固定时间间隔进行数据分包,每个带有帧数标识的数据包即为用户操作序列帧,然后将用户操作序列帧下发给各个客户端,例如可按11.5毫秒,或12.5毫秒,或13.5毫秒的间隔进行分帧后下发。
在步骤S604中,游戏服务进程将用户操作序列帧分别发送至多个客户端。游戏服务将用户操作序列帧下发给各个客户端之后,各个客户端可对所有用户的操作进行运算并同步表现。
在步骤S606中,游戏服务进程接收来自多个客户端的用户操作序列帧的第二运算结果。各个客户端在将收到的用户操作序列帧中所有用户的操作进行运算完成后,分别将各自的第二运算结果与下一次的用户操作序列一同发送给游戏服务进程,第二运算结果用于比对验证。
在步骤S608中,游戏服务进程通过中转服务将用户操作序列帧发送至请求消息队列。
在步骤S610中,游戏核心运算进程通过游戏核心代理进程从请求消息队列获取用户操作序列帧并运算获得第一运算结果。
在步骤S612中,游戏核心运算进程通过游戏核心代理进程将第一运算结果发送至请求消息队列。
步骤S608至步骤S612的具体实施方式可参照图4及图5A,此处不再赘述。
在步骤S614中,游戏服务进程通过结果消息队列经由中转服务接收第一运算结果。
在步骤S616中,游戏服务进程将多个第二运算结果分别与第一运算结果进行比较,在判定与第一运算结果不一致时向对应的客户端发送验证失败信息。若判定第二运算结果与第一运算结果一致,可向对应的客户端返回验证成功信息。
根据本公开实施例提供的方法,通过将多个客户端对用户操作序列帧的多个第二运算结果与游戏核心运算进程对用户操作序列帧的第一运算结果分别进行比对,可对各个客户端的结果进行准确验证,不影响游戏设计的同时,解决了相关技术中服务器采用“少数服从多数”方式对于两种结果各占一半时无法准确验证的技术问题。
图7是根据图5A至图6示出的一种游戏应用安全验证处理流程示意图。如图7所示,单局游戏中所有客户端(702)将用户操作序列发送到单局服务器游戏服务进程;游戏服务进程收集所有客户端的请求并按照固定时间间隔分包为用户操作序列帧(或称为服务器帧),并将用户操作序列帧下发所有客户端,并将用户操作序列帧发送给中转服务(704),例如游戏服务进程在第一时间点获得所有客户端的第一用户操作序列帧,然后以固定时间间隔(如可为11.5毫秒,或12.5毫秒,或13.5毫秒等等)在第二时间点获得第一用户操作序列帧的第二运算结果和所有客户端的第二用户操作序列帧。(通过消息队列)发送给游戏核心运算进程的数据包中可包括第二运算结果,不需要将第二运算结果从第二时间点的服务器帧中分离出来,以提高传输效率;中转服务把请求转发到消息队列(706),游戏核心代理订阅指定版本(706),在收到指定版本的用户操作序列帧的验证请求后投递给对应指定版本游戏核心运算进程(706),游戏核心运算进程对用户操作进行运算并返回第一运算结果(708)至游戏服务进程(710);游戏服务进程分别将各个客户端的第二运算结果与第一运算结果进行比对(712),在发现某个客户端的第二运算结果与第一运算结果不同时,判定该客户端作弊,将作弊提示信息与第一运算结果返回该客户端(7141);比对结果为客户端的第二运算结果与第一运算结果相同时,直接返回客户端验证成功信息(7142)。
图8是根据图7示出的一种游戏应用安全验证处理时序示意图。如图8所示,客户端(801)上行发送操作序列(S801);单局游戏服务器游戏服务进程(802)将用户操作序列汇总并按固定时间间隔分帧(S802),分包为用户操作序列帧并分发(S803)给客户端(801),并在下一帧获得下一个用户操作序列与收集客户端(801)运算的本次用户操作序列帧的结果;游戏服务进程(802)向中转服务(803)发送服务器帧(即用户操作序列帧)请求(S804);中转服务(803)发布服务器帧(S805)至消息队列(804);游戏核心代理进程(805)从消息队列(804)收到订阅消息(S806),并转发(S807)给游戏核心运算进程(806);游戏核心运算进程(806)运算服务器帧得到结果(S808)并返回(S809)游戏核心代理进程(805);游戏核心代理进程(805)将结果转发(S810)至消息队列(804)(两个方向的消息队列不是同一个队列,可作为同一个消息队列集群进行管理),消息队列(804)再将结果返回(S811)中转服务(803);中转服务(803)将结果返回(S812)游戏服务进程(802);游戏服务进程(802)以游戏核心运算结果为准验证客户端的运算结果(S813),然后将验证结果返回客户端(S814)。
图9是根据图6至图8示出的一种游戏客户端界面示意图。如图9所示,左侧为玩家A的客户端游戏界面,左侧为玩家B的客户端游戏界面。玩家A和玩家B分别选好英雄并布置好阵型后,玩家A的客户端和玩家B的客户端分别运算战斗结果,两个客户端分别得到玩家A胜利和玩家B胜利的运算结果,服务器端的游戏核心运算进程运算战斗结果为玩家B胜利,然后玩家A的游戏界面则显示作弊提示信息及实际战斗结果。
图10是根据一示例性实施例示出的一种游戏应用安全验证方案架构图。如图10所示,游戏服务(1004)进程收集客户端(1002)的上行操作并进行帧同步,并将用户操作序列帧通过代理服务(Proxy)(1006)中转发往消息队列Kafka(1008),Kafka(1008)通过Zookeeper(1009)管理其节点的服务器,不同版本的游戏核心运算程序与一个游戏核心代理在一个容器(1010)(1011)中运行。容器中还包括客户端版本升级时生成的配置文件,配置文件中保存版本标识信息,用于游戏核心代理订阅对应版本的消息。
在相关技术中,在客户端版本更新时,由于无法判断切换过程中用户更新到新版本的速度,所以服务器为了同时运行新、旧版本的游戏核心运算,需要提前预留足够的处理资源和内存资源,在资源预留上至少是单版本运行时的1.5-2.0倍(例如旧版本开启10个进程用于处理对用户操作序列帧进行运算请求的同时,为新版本也需开启5-10个进程,此时选取的服务器需要能够支持15-20个进程),等用户全部切换为新版本后才能下线旧版本的游戏核心运算,造成运算资源浪费。
基于容器技术可以实现多版本的自动伸缩,即新版本自动扩容,旧版本自动缩容。如图10所示,游戏核心运算进程可包括第一版本的游戏核心运算进程和第二版本的游戏核心运算进程,游戏核心代理进程可包括第一版本的游戏核心代理进程和第二版本的游戏核心代理进程。第一版本的游戏核心运算进程与第一版本的游戏核心代理进程运行在第一容器(1010)中,第二版本的游戏核心运算进程与第二版本的游戏核心代理进程运行在第二容器(1011)中,第一容器(1010)与第二容器(1011)共享运行所需的资源。例如可通过Kubernetes管理各个容器。图11A至图11B是根据一示例性实施例示出的基于容器技术的一种新版本客户端上线时游戏核心运算进程的资源调配方法的示意图。如图11A所示,在新版本上线之初,可仅开启一个1.2版本容器(Pod 1.2),当Kubernetes检测到(由于新版本用户的增加)Pod 1.2的CPU占用超过50%(预设阈值,例如也可设为40%或60%等等)时,再开启例如一个(具体数量可通过公式计算)Pod 1.2,此时两个Pod 1.2的CPU占用例如降为各30%,然后随着新版本用户的增加Kubernetes又检测到各Pod 1.2的CPU占用超过50%时,再开启一个Pod 1.2,以此类推,如图11B所示,例如可逐渐增加到开启5个Pod 1.2。如图11A所示,在新版本上线之初,可仅开启一个1.2版本容器(Pod 1.2),当Kuber对于旧版本的Pod1.1,在新版本上线之初例如开启了9个Pod 1.1,由于旧版本的用户在减少,Kubernetes检测到各Pod 1.1的CPU占用低于预设阈值时,关闭例如一个(具体数量通过公式计算)Pod1.1,然后随着旧版本用户的减少Kubernetes再检测各Pod 1.1的CPU占用低于预设阈值时再继续关闭Pod1.1,如图11B所示,例如可逐渐减少到开启5个Pod 1.1。从而可以实现多版本的自动伸缩,即新版本自动扩容,降低运维的操作成本以及资源预留的浪费。
在采用Kubernetes部署容器时,可通过Kubernetes的命令行接口kubectl设置autoscale参数,指定扩容的指标,包括CPU阈值、最大和最小的进程数量等等,其中最小进程数可以设置为0,1或2等等,最大进程数可按实际情况设置。
游戏核心运算程序可为独立编译的Linux平台版本,在运行时需要考虑异常情况的处理。图12是根据一示例性实施例示出的一种异常检测方法的流程图。如图12所示的方法例如可以应用于上述系统的服务器端。
参考图12,本公开实施例提供的方法120可以包括以下步骤。
在步骤S1202中,游戏核心运算进程通过异常检测命令在运行异常时结束进程。游戏核心运算进程中发生的一些异常操作是游戏核心运算程序可以感知到的,如访问非法地址等等。可以使用Try-Catch机制,即在游戏核心运算程序代码中可包含Try-Catch代码,例如{try异常调用-catch结束游戏核心运算程序运行},可在发现游戏核心运算进程中异常操作(如访问非法地址等)时自动退出该进程。
在步骤S1204中,容器的编排引擎在检测到游戏核心运算进程结束时结束运行在容器中的进程。容器的编排引擎具有监控机制,可监测容器中运行的进程的心跳,当在一定时间内检测不到其中进程的心跳时可自动关闭该容器,重新开启一个容器。
在一些实施例中,例如,Kubernetes中包括管理节点(容器在节点上运行,节点包含运行容器的必要组件)健康状态的组件,该组件通过循环调用函数周期性地监测节点状态,每当监测到有节点为未运行状态且延续一定时间时,将该节点上的pod驱逐到其他节点,关闭原pod并重新开启pod。
在另一些实施例中,例如,在不方便使用Kubernetes的环境下,也可以使用Zookeeper的方案进行实现容器监控,其中采用注册和服务发现的方式进行版本管理,采用心跳机制进行服务健康检查。基于Zookeeper临时节点的特性,可以让不同的进程都在Zookeeper的一个指定节点下创建临时子节点,不同的进程可以根据该临时子节点判断对应的进程是否存活,通过这种方式检测和被检测进程可不直接相关联,而是通过Zookeeper上某个节点进行关联,减少了模块之间的耦合。此处采用的Zookeeper与管理Kafka集群的Zookeeper可以复用,也可以分别独立部署。
根据本公开实施例提供的异常检测方法,通过游戏核心运算程序中的异常检测命令在运行异常时结束进程,游戏核心运算所在容器的编排引擎在检测到游戏核心运算进程结束时结束运行在容器中的进程,实现了基于容器技术监控游戏核心运算进程,在游戏核心运算进程自动退出时结束容器进程以重新开启容器。
游戏核心运算进程中可能还会发生一些异常,这些异常是游戏核心运算程序无法感知到的,例如运行出错导致死循环在其中部分代码等等,这种情况下可借助处于同一容器中的游戏核心代理进程进行异常检测。图13是根据一示例性实施例示出的另一种异常检测方法的流程图。如图13所示的方法例如可以应用于上述系统的服务器端。
参考图13,本公开实施例提供的方法130可以包括以下步骤。
在步骤S1302中,游戏核心代理进程向游戏核心运算进程发送检测请求。游戏核心代理程序中可包含检测请求发送代码,在运行时向游戏核心运算进程发送响应请求,游戏核心运算程序中可包含请求响应代码,游戏核心运算进程正常运行时会运行到此段代码并对游戏核心运算进程发送响应请求,若游戏核心运算进程自动退出,或在某段运算代码中陷入死循环时,无法运行到请求响应代码以响应游戏核心代理进程的请求。
在步骤S1304中,游戏核心代理进程在预定时间内未收到游戏核心运算进程对于检测请求的响应时生成异常报告文件。游戏核心代理(gamecoreagent)进程在检测到同一Pod中的游戏核心运算进程运行异常(如游戏核心运算进程自动退出,部分代码死循环导致的运行超时等)时,即未收到游戏核心运算进程对于检测请求的响应时可生成异常报告文件,该异常报告文件用于指示结束运行容器中的进程。
在步骤S1306中,容器的编排引擎在通过健康检测命令检测到异常报告文件时结束运行在容器中的进程。Kubernetes可通过该Pod的Dockerfile的HealthCheck命令运行health_check脚本,health_check脚本在Pod中主动检测上述异常报告文件是否存在,如果存在说明游戏核心运算进程异常,则主动销毁该Pod。在游戏核心运算进程每次开始时,即使大概率不存在异常报告文件,也可主动查找并删除这个异常报告文件,防止重复销毁Pod。示例Dockerfile代码如下:
FROM centos:7
MAINTAINER**.*
#install mono
RUN rpm--import"https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF"
RUN su-c'curlhttps://download.mono-project.com/repo/centos7-stable.repo|tee/etc/yum.repos.d/mono-centos8-stable.repo'
RUN yum install-y mono-devel
#add user
RUN useradd-g users-d/home/user00user00
RUN mkdir/home/user00/gamecore
COPY TCPClient.exe/home/user00/gamecore/
COPY health_check.sh/home/user00/gamecore/
COPY*/home/user00/gamecore/
USER user00
RUN rm-rf/tmp/unhealth
WORKDIR/home/user00/gamecore/
HEALTHCHECK--interval=30s--timeout=3s CMD health_check.sh
CMD["mono","./TCPClient.exe"]
其中,HealthCheck命令行表示每隔30秒检测一次运行health_check脚本,检测异常报告文件(unhealth)的存在,即每隔30秒检查一次游戏核心运算(gamecore)程序是否有心跳,即是否仍在运行,检测时若超过3秒没检测到心跳则认为gamecore已停止运行,则主动关闭该Pod所有进程;同时。示例health_check脚本如下:
其中,if-then-fi语句表示判断/tmp/unhealth是否是一个常规文件,若是则退出并返回1,否则退出并返回0,表明在/tmp路径中检测到存在unhealth文件时返回1,即gamecoreagent若未检测到gamecore的心跳,会生成unhealth文件,检测到unhealth文件时说明gamecore进程出现了异常。
示例Pod的配置文件如下,其中设置了unhealth文件的路径tmp:
其中,volumeMounts将容器宿主机的目录/tmp挂载到名称为gamecorepod的容器中,使gamecorepod中运行的gamecore进程和gamecoreagent进程都可以访问目录/tmp(name:healthcheck为挂载设备名称,与volumes:下的name对应),即gamecore可自行在异常退出进程时生成unhealth文件并存储到/tmp目录,gamecoreagent也可在检测不到gamecore心跳时生成unhealth并存储到/tmp目录,以便运行上述health_check脚本时进行检测。
根据本公开实施例提供的异常检测方法,通过游戏核心代理进程向游戏核心运算进程发送检测请求后在预定时间内未收到其响应时生成异常报告文件,容器编排引擎通过健康检测命令检测到该异常报告文件时结束容器中的进程,实现了基于容器编排引擎配合游戏核心代理监控游戏核心运算进程的异常,在游戏核心运算进程出现异常时结束容器进程以重新开启容器。
图14是根据一示例性实施例示出的一种游戏应用安全验证装置的框图。如图14所示的装置例如可以应用于上述系统的服务器端。
参考图14,本公开实施例提供的装置140可以包括操作获取模块1402、操作分发模块1404和结果验证模块1406。
操作获取模块1402可用于游戏服务进程获取游戏应用客户端的用户操作序列以生成用户操作序列帧。
操作分发模块1404可用于游戏服务进程分发用户操作序列帧以便游戏核心运算进程获得用户操作序列帧。
结果验证模块1406可用于游戏服务进程接收来自游戏核心运算进程的用户操作序列帧的第一运算结果。
结果验证模块1406还可用于游戏服务进程接收来自客户端的用户操作序列帧的第二运算结果。
结果验证模块1406还可用于游戏服务进程通过第一运算结果对第二运算结果进行验证。
图15是根据一示例性实施例示出的另一种游戏应用安全验证装置的框图。如图15所示的装置例如可以应用于上述系统的服务器端。
参考图15,本公开实施例提供的装置150可以包括操作获取模块1502、操作分发模块1504、结果运算模块1505、结果验证模块1506和异常检测模块1508。
操作获取模块1502可用于游戏服务进程获取游戏应用客户端的用户操作序列帧。
操作获取模块1502还可用于游戏服务进程获取游戏应用多个客户端的用户操作序列。
操作分发模块1504可用于游戏服务进程分发用户操作序列帧以便游戏核心运算进程获得用户操作序列帧。
操作分发模块1504还可用于游戏服务进程将用户操作序列帧发送至请求消息队列。
操作分发模块1504还可用于游戏服务进程通过中转服务将用户操作序列帧发送至请求消息队列。
操作分发模块1504还可用于游戏服务进程以预定时间间隔对多个客户端的用户操作序列进行分帧获得用户操作序列帧;游戏服务进程将用户操作序列帧分别发送至多个客户端。
结果运算模块1505可用于游戏核心运算进程从请求消息队列获取用户操作序列帧。
结果运算模块1505还可用于游戏核心运算进程通过游戏核心代理进程从请求消息队列获取用户操作序列帧。游戏核心代理进程与游戏核心运算进程运行在同一容器中。游戏核心运算进程包括第一版本的游戏核心运算进程和第二版本的游戏核心运算进程;游戏核心代理进程包括第一版本的游戏核心代理进程和第二版本的游戏核心代理进程;其中,第一版本的游戏核心运算进程与第一版本的游戏核心代理进程运行在第一容器中,第二版本的游戏核心运算进程与第二版本的游戏核心代理进程运行在第二容器中,第一容器与第二容器共享运行所需的资源。
结果运算模块1505还可用于游戏核心运算进程通过游戏核心代理进程根据订阅的标识从请求消息队列中获取用户操作序列帧。
结果运算模块1505还可用于游戏核心运算进程通过异常检测命令在运行异常时结束进程。
结果运算模块1505还用于游戏核心代理进程向游戏核心运算进程发送检测请求;游戏核心代理进程在预定时间内未收到游戏核心运算进程对于检测请求的响应时生成异常报告文件
结果验证模块1506可用于游戏服务进程接收来自游戏核心运算进程的用户操作序列帧的第一运算结果。
结果验证模块1506还可用于游戏服务进程通过结果消息队列接收来自游戏核心运算进程的第一运算结果。
结果验证模块1506还可用于游戏服务进程通过结果消息队列经由中转服务接收来自游戏核心运算进程通过游戏核心代理进程发送的第一运算结果。
结果验证模块1506还可用于游戏服务进程接收来自多个客户端的多个第二运算结果;游戏服务进程将多个第二运算结果分别与第一运算结果进行比较,在判定与第一运算结果不一致时向对应的客户端发送验证失败信息。
异常检测模块1508可用于容器的编排引擎在检测到游戏核心运算进程结束时结束运行在容器中的进程。
异常检测模块1508还可用于容器的编排引擎在通过健康检测命令检测到异常报告文件时结束运行在容器中的进程。
本公开实施例提供的装置中的各个模块的具体实现可以参照上述方法中的内容,此处不再赘述。
图16示出本公开实施例中一种电子设备的结构示意图。需要说明的是,图16示出的设备仅以计算机系统为示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图16所示,设备1600包括中央处理单元(CPU)1601,其可以根据存储在只读存储器(ROM)1602中的程序或者从存储部分1608加载到随机访问存储器(RAM)1603中的程序而执行各种适当的动作和处理。在RAM 1603中,还存储有设备1600操作所需的各种程序和数据。CPU1601、ROM 1602以及RAM 1603通过总线1604彼此相连。输入/输出(I/O)接口1605也连接至总线1604。
以下部件连接至I/O接口1605:包括键盘、鼠标等的输入部分1606;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1607;包括硬盘等的存储部分1608;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1609。通信部分1609经由诸如因特网的网络执行通信处理。驱动器1610也根据需要连接至I/O接口1605。可拆卸介质1611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1610上,以便于从其上读出的计算机程序根据需要被安装入存储部分1608。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1609从网络上被下载和安装,和/或从可拆卸介质1611被安装。在该计算机程序被中央处理单元(CPU)1601执行时,执行本公开的系统中限定的上述功能。
需要说明的是,本公开所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括操作获取模块、操作分发模块和结果验证模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,操作获取模块还可以被描述为“从客户端获取用户操作序列的模块”。
作为另一方面,本公开还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:游戏服务进程获取游戏应用客户端的用户操作序列以生成用户操作序列帧;游戏服务进程分发用户操作序列帧以便游戏核心运算进程获得用户操作序列帧;游戏服务进程接收来自游戏核心运算进程的用户操作序列帧的第一运算结果;游戏服务进程接收来自客户端的用户操作序列帧的第二运算结果;游戏服务进程通过第一运算结果对第二运算结果进行验证。
以上具体地示出和描述了本公开的示例性实施例。应可理解的是,本公开不限于这里描述的详细结构、设置方式或实现方法;相反,本公开意图涵盖包含在所附权利要求的精神和范围内的各种修改和等效设置。
Claims (11)
1.一种游戏应用安全验证方法,其特征在于,包括:
游戏服务进程获取游戏应用客户端的用户操作序列以生成用户操作序列帧;
所述游戏服务进程分发所述用户操作序列帧以便游戏核心运算进程获得所述用户操作序列帧;
所述游戏服务进程接收来自所述游戏核心运算进程的所述用户操作序列帧的第一运算结果;
所述游戏服务进程接收来自所述客户端的所述用户操作序列帧的第二运算结果;
所述游戏服务进程通过所述第一运算结果对所述第二运算结果进行验证。
2.根据权利要求1所述的方法,其特征在于,所述游戏服务进程分发所述用户操作序列帧以便游戏核心运算进程获得所述用户操作序列帧包括:
所述游戏服务进程将所述用户操作序列帧发送至请求消息队列;
所述游戏核心运算进程从所述请求消息队列获取所述用户操作序列帧;
所述游戏服务进程接收来自所述游戏核心运算进程的所述用户操作序列帧的第一运算结果包括:
所述游戏服务进程通过结果消息队列接收来自所述游戏核心运算进程的所述第一运算结果。
3.根据权利要求2所述的方法,其特征在于,所述游戏服务进程将所述用户操作序列帧发送至请求消息队列包括:
所述游戏服务进程通过中转服务将所述用户操作序列帧发送至所述请求消息队列;
所述游戏核心运算进程从所述请求消息队列获取所述用户操作序列帧包括:
所述游戏核心运算进程通过游戏核心代理进程从所述请求消息队列获取所述用户操作序列帧;
所述游戏服务进程通过结果消息队列接收来自所述游戏核心运算进程的所述第一运算结果包括:
所述游戏服务进程通过结果消息队列经由所述中转服务接收来自所述游戏核心运算进程通过所述游戏核心代理进程发送的所述第一运算结果。
4.根据权利要求2所述的方法,其特征在于,所述游戏核心代理进程与所述游戏核心运算进程运行在同一容器中;
所述游戏核心运算进程通过游戏核心代理进程从所述请求消息队列获取所述用户操作序列帧包括:
所述游戏核心运算进程通过所述游戏核心代理进程根据订阅的标识从所述请求消息队列中获取所述用户操作序列帧。
5.根据权利要求4所述的方法,其特征在于,所述游戏核心运算进程包括第一版本的游戏核心运算进程和第二版本的游戏核心运算进程;所述游戏核心代理进程包括第一版本的游戏核心代理进程和第二版本的游戏核心代理进程;
其中,所述第一版本的游戏核心运算进程与所述第一版本的游戏核心代理进程运行在第一容器中,所述第二版本的游戏核心运算进程与所述第二版本的游戏核心代理进程运行在第二容器中,所述第一容器与所述第二容器共享运行所需的资源。
6.根据权利要求4所述的方法,其特征在于,所述方法还包括:
所述游戏核心运算进程通过异常检测命令在运行异常时结束进程;
所述容器的编排引擎在检测到所述游戏核心运算进程结束时结束运行在所述容器中的进程。
7.根据权利要求4所述的方法,其特征在于,所述方法还包括:
所述游戏核心代理进程向所述游戏核心运算进程发送检测请求;
所述游戏核心代理进程在预定时间内未收到所述游戏核心运算进程对于所述检测请求的响应时生成异常报告文件;
所述容器的编排引擎在通过健康检测命令检测到所述异常报告文件时结束运行在所述容器中的进程。
8.根据权利要求1所述的方法,其特征在于,所述游戏服务进程获取游戏应用客户端的用户操作序列以生成用户操作序列帧包括:
所述游戏服务进程获取游戏应用多个客户端的用户操作序列;
所述游戏服务进程以预定时间间隔对所述多个客户端的用户操作序列进行分帧获得所述用户操作序列帧;
所述方法还包括:
所述游戏服务进程将所述用户操作序列帧分别发送至所述多个客户端;
所述游戏服务进程接收来自所述客户端的所述用户操作序列帧的第二运算结果包括:
所述游戏服务进程接收来自所述多个客户端的多个第二运算结果;
所述游戏服务进程通过所述第一运算结果对所述第二运算结果进行验证包括:
所述游戏服务进程将所述多个第二运算结果分别与所述第一运算结果进行比较,在判定与所述第一运算结果不一致时向对应的客户端发送验证失败信息。
9.一种游戏应用安全验证装置,其特征在于,包括:
操作获取模块,用于游戏服务进程获取游戏应用客户端的用户操作序列以生成用户操作序列帧;
操作分发模块,用于所述游戏服务进程分发所述用户操作序列帧以便游戏核心运算进程获得所述用户操作序列帧;
结果验证模块,用于所述游戏服务进程接收来自所述游戏核心运算进程的所述用户操作序列帧的第一运算结果;
结果验证模块,还用于所述游戏服务进程接收来自所述客户端的所述用户操作序列帧的第二运算结果;
结果验证模块,还用于所述游戏服务进程通过所述第一运算结果对所述第二运算结果进行验证。
10.一种设备,包括:存储器、处理器及存储在所述存储器中并可在所述处理器中运行的可执行指令,其特征在于,所述处理器执行所述可执行指令时实现如权利要求1-8任一项所述的方法。
11.一种计算机可读存储介质,其上存储有计算机可执行指令,其特征在于,所述可执行指令被处理器执行时实现如权利要求1-8任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010585308.2A CN111841019A (zh) | 2020-06-23 | 2020-06-23 | 游戏应用安全验证方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010585308.2A CN111841019A (zh) | 2020-06-23 | 2020-06-23 | 游戏应用安全验证方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111841019A true CN111841019A (zh) | 2020-10-30 |
Family
ID=72988527
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010585308.2A Pending CN111841019A (zh) | 2020-06-23 | 2020-06-23 | 游戏应用安全验证方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111841019A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112999661A (zh) * | 2021-03-24 | 2021-06-22 | 广州虎牙科技有限公司 | 一种游戏作弊识别的方法及装置 |
CN113568816A (zh) * | 2021-09-22 | 2021-10-29 | 国汽智控(北京)科技有限公司 | 进程监控方法、装置和设备 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101227428A (zh) * | 2008-01-30 | 2008-07-23 | 中兴通讯股份有限公司 | 一种应用服务器及其远程控制方法 |
CN105657067A (zh) * | 2016-03-24 | 2016-06-08 | 网易(杭州)网络有限公司 | 游戏验证方法、装置、游戏服务器及验证服务器 |
CN108282507A (zh) * | 2017-01-06 | 2018-07-13 | 阿里巴巴集团控股有限公司 | 在CaaS环境中进行应用发布的方法、装置以及电子设备 |
CN108810125A (zh) * | 2018-06-01 | 2018-11-13 | 云家园网络技术有限公司 | 物理节点的服务发现方法及系统 |
CN109091870A (zh) * | 2018-09-17 | 2018-12-28 | 北京金山安全软件有限公司 | 一种处理数据的方法和装置 |
CN109499069A (zh) * | 2017-09-14 | 2019-03-22 | 腾讯科技(深圳)有限公司 | 操作结果校验方法、装置、存储介质及电子装置 |
CN110090445A (zh) * | 2019-05-10 | 2019-08-06 | 深圳市腾讯网域计算机网络有限公司 | 一种外挂检测方法、客户端及服务器 |
CN110180177A (zh) * | 2019-05-28 | 2019-08-30 | 网易(杭州)网络有限公司 | 网络游戏的维护方法、装置、介质及电子设备 |
-
2020
- 2020-06-23 CN CN202010585308.2A patent/CN111841019A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101227428A (zh) * | 2008-01-30 | 2008-07-23 | 中兴通讯股份有限公司 | 一种应用服务器及其远程控制方法 |
CN105657067A (zh) * | 2016-03-24 | 2016-06-08 | 网易(杭州)网络有限公司 | 游戏验证方法、装置、游戏服务器及验证服务器 |
CN108282507A (zh) * | 2017-01-06 | 2018-07-13 | 阿里巴巴集团控股有限公司 | 在CaaS环境中进行应用发布的方法、装置以及电子设备 |
CN109499069A (zh) * | 2017-09-14 | 2019-03-22 | 腾讯科技(深圳)有限公司 | 操作结果校验方法、装置、存储介质及电子装置 |
CN108810125A (zh) * | 2018-06-01 | 2018-11-13 | 云家园网络技术有限公司 | 物理节点的服务发现方法及系统 |
CN109091870A (zh) * | 2018-09-17 | 2018-12-28 | 北京金山安全软件有限公司 | 一种处理数据的方法和装置 |
CN110090445A (zh) * | 2019-05-10 | 2019-08-06 | 深圳市腾讯网域计算机网络有限公司 | 一种外挂检测方法、客户端及服务器 |
CN110180177A (zh) * | 2019-05-28 | 2019-08-30 | 网易(杭州)网络有限公司 | 网络游戏的维护方法、装置、介质及电子设备 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112999661A (zh) * | 2021-03-24 | 2021-06-22 | 广州虎牙科技有限公司 | 一种游戏作弊识别的方法及装置 |
CN113568816A (zh) * | 2021-09-22 | 2021-10-29 | 国汽智控(北京)科技有限公司 | 进程监控方法、装置和设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111405304B (zh) | 一种主播互动方法、装置、计算机设备和存储介质 | |
US9662588B2 (en) | Spawning new timelines during game session replay | |
US10092833B2 (en) | Game session sharing | |
US9393486B2 (en) | Character simulation and playback notification in game session replay | |
CN109816447A (zh) | 柜机广告的智能监控方法、装置和存储介质 | |
CN111841019A (zh) | 游戏应用安全验证方法、装置、设备及存储介质 | |
CN111625353B (zh) | 虚拟资源分发处理方法、装置、服务器及存储介质 | |
CN110585697A (zh) | 一种游戏中的跨服控制方法及装置 | |
KR102500069B1 (ko) | 멀티 플레이어 룸을 제공하는 방법 및 장치, 그리고 디바이스 및 매체 | |
CN105657067A (zh) | 游戏验证方法、装置、游戏服务器及验证服务器 | |
CN111818349A (zh) | 一种页面展示方法、装置、电子设备及存储介质 | |
CN110198335A (zh) | 消息同步方法及装置、电子设备及存储介质 | |
CN109525627A (zh) | 数据传输方法、装置、存储介质及电子装置 | |
CN115671726A (zh) | 游戏数据渲染方法、装置、设备及存储介质 | |
CN113824983A (zh) | 数据匹配方法、装置、设备及计算机可读存储介质 | |
CN112084044B (zh) | 系统中事件处理方法及相关装置 | |
CN113254217A (zh) | 业务的消息处理方法、装置及电子设备 | |
CN102833592B (zh) | 一种媒体内容调度方法、系统和设备 | |
CN110354496B (zh) | 电子竞技赛事的处理方法及装置、存储介质、电子设备 | |
CN117009626A (zh) | 游戏场景的业务处理方法、装置、设备及存储介质 | |
CN102779218B (zh) | 一种游戏开发装置和游戏运行装置 | |
US20230277933A1 (en) | Method and apparatus for providing a computer implemented application | |
CN112023396B (zh) | 云游戏数据交互方法及装置、计算机可读介质及电子设备 | |
CN111249745B (zh) | 游戏部署方法、游戏运营方法、设备和存储介质 | |
CN114404994A (zh) | 游戏数据处理方法、设备、介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |