CN109939441B - 应用复盘校验处理方法及系统 - Google Patents
应用复盘校验处理方法及系统 Download PDFInfo
- Publication number
- CN109939441B CN109939441B CN201910193906.2A CN201910193906A CN109939441B CN 109939441 B CN109939441 B CN 109939441B CN 201910193906 A CN201910193906 A CN 201910193906A CN 109939441 B CN109939441 B CN 109939441B
- Authority
- CN
- China
- Prior art keywords
- verification
- server
- application
- version number
- client
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种应用复盘校验处理方法、系统及存储介质,逻辑服务器可以选择与客户端版本号相应的验证服务器,对客户端录制的应用录制文件进行复盘校验,可见,本申请不需要为不同版本客户端,配置对应的应用复盘校验处理系统,利用本申请提供的应用复盘校验处理系统实现了多版本客户端的工作流程的复盘校验,实现了线上多版本兼容,且实现了对客户端的工作流程的完全复盘,提高了校验效率及准确性。
Description
技术领域
本申请涉及网络安全应用领域,具体涉及一种应用复盘校验处理方法及系统。
背景技术
目前,可以采用应用复盘校验的方式,来检测应用操作中的一些作弊行为,现有技术通常是采用弱校验和模拟校验的方式实现,即验证输入合法性和验证输出是否有明显异常数据。
然而,现有的这种应用复盘校验处理方法中,服务器往往无法完整复盘客户端的工作流程,且很容易发现模拟校验中的校验参考值,导致非法用户利用该校验参考值实施作弊行为,另外在长期运营过程中,若校验参考值发生变化,很容易导致校验结果不准确。
发明内容
有鉴于此,本申请实施例提供一种应用复盘校验处理方法及系统,逻辑服务器可以选择与客户端版本号相应的验证服务器,对客户端录制的应用录制文件进行复盘校验,实现了线上多版本兼容,且实现了对客户端的工作流程的完全复盘,提高了校验效率及准确性。
为解决上述问题,本申请实施例提供如下技术方案:
本申请实施例提供了一种应用复盘校验处理方法,其特征在于,包括:
逻辑服务器接收客户端发送的应用录制文件,并获取相应的客户端版本号;
所述逻辑服务器利用所述客户端版本号映射的验证版本号,确定目标验证服务器,并将所述应用录制文件发送至目标验证服务器;所述目标验证服务器利用所述应用录制文件进行复盘校验,得到校验结果;
所述目标验证服务器将所述校验结果反馈至所述客户端。
本申请还提高了一种应用复盘校验处理系统,其特征在于,包括:
逻辑服务器,用于接收客户端发送的应用录制文件,并获取相应的客户端版本号,利用所述客户端版本号映射的验证版本号,确定目标验证服务器,并将所述应用录制文件发送至目标验证服务器;
验证服务器,用于利用应用录制文件进行复盘校验,得到校验结果,并将所述校验结果反馈至所述客户端。
基于上述技术方案,本申请提供了一种应用复盘校验处理方法及系统,对于应用于各平台的客户端版本,逻辑服务器可以选择与客户端版本号相应的验证服务器,对客户端录制的应用录制文件进行复盘校验,不需要为不同版本客户端,配置各自对应的应用复盘校验处理系统,实现了线上多版本兼容,且本申请将逻辑服务器和验证服务器分离开,实现了对客户端的工作流程的离线完全复盘,另外,本申请整个复盘校验过程,不需要预先配置校验参考值,也就避免了利用校验参考值进行复盘校验带来的问题,提高了校验效率及准确性。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1示出了本申请实施例提供的一种应用复盘校验处理系统的结构示意图;
图2示出了本申请实施例提供的一种应用复盘校验处理方法的信令流程图;
图3示出了本申请实施例提供的一种应用复盘校验处理方法中,扩充时间轮定时器的示意图;
图4示出了本申请实施例提供的一种应用复盘校验处理方法中,实现逻辑服务器与验证服务器之间信息同步的信令流程示意图;
图5示出了本申请实施例提供的一种应用复盘校验处理系统的逻辑服务器的结构示意图;
图6示出了本申请实施例提供的一种应用复盘校验处理系统的验证服务器的结构示意图;
图7示出了本申请实施例提供的一种服务器的硬件结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
参照图1,为实现本申请提供的应用复盘校验处理方法的一种系统结构示意图,该系统可以包括客户端11、逻辑服务器12、验证服务器13、数据存储设备14以及数据分析设备15,其中:
客户端11可以是为用户提供本地服务的应用程序,以网络游戏为例,客户端可以是游戏客户端,用户可以使用手机、平板电脑等移动终端,联网登录游戏客户端账号,独自或与他人组队玩游戏;用户也可以在离线状态下玩游戏。
其中,在用户登录客户端11玩游戏的过程中,客户端可以记录用户的操作,尤其是在游戏测试阶段,可以利用客户端的录制功能,录制用户在整个游戏中的操作内容,以及对应的游戏画像,得到相应录像文件,本申请对游戏操作过程的录制过程不做详述。
逻辑服务器12可以是为客户端11的正常运行提供应用逻辑的服务设备,仍以游戏为例,在游戏安全检测过程中,逻辑服务器12可以对客户端的录像文件进行逻辑校验,如校验游戏流程、游戏中的奖励、消耗和一些基础数据是否和逻辑相匹配等等,本申请对逻辑服务器12的具体结构及其实现的功能不做详述,可以参照下文实施例相应部分的描述。
验证服务器13可以是实现应用的复盘校验的服务设备,其可以支持在线扩容、缩容、自动容灾和热更新等。且验证服务器13支持的版本号可以通过定时的同步消息,同步到逻辑服务器12上,具体实现过程可以参照下文相应实施例的描述。
其中,由于逻辑服务器12是从验证服务器13同步版本号,使得逻辑服务器12会存在更新后的缓存数据过期的情况,以及在验证服务器13出现故障,暂时不可用的情况下,可以将逻辑服务器12中,从验证服务器13获取的相应数据删除,并在下一次同步版本号的请求中,恢复该版本号与验证服务器映射关系,具体实现过程可以参照下文相应实施例的描述。
可选的,在服务器侧,上述验证逻辑还可以考虑多版本兼容的问题。由于客户端可以适用于多个不同的平台,可以配置相应的对外版本,也就是说,同一客户端可以具有多个版本,所以,在验证过程中,需要使用正确的资源和版本,对当前的客户端版本上报的录像数据进行校验。
数据存储设备14可以与验证服务器13建立通信连接,用来存储应用录制文件及其对应校验结果,本申请对数据存储设备14的具体结构不做限定,对于不同结构的数据存储设备14,其可以采用相应的存储方式,实现对应用录制文件的存储,本申请对此不作详述。
数据分析设备15可以用来实现离线数据分析,以便自动发现潜在的问题,并及时提醒开发者进行处理,本申请对该数据分析设备15的产品类型及其结构不做限定,可以是电脑等计算机设备。
可选的,数据分析设备15与数据存储设备14可以部署在同一计算机设备中,也可以部署在独立的计算机设备中。对于前者,数据存储设备14可以是计算机设备的存储器,数据分析设备15可以是配置有数据分析程序的处理器,其可以在离线状态下,对读取到的应用录制文件及其校验结果进行分析,检测内存和逻辑是否存在问题,具体检测方法本实施例不做限定。
结合上图1所示的系统结构示意图,参照图2,为本申请实施例提供了一种应用复盘校验处理方法的信令流程示意图,该方法可以包括但并不局限于以下步骤:
步骤S11,客户端获取应用录制文件;
为了实现对客户端的复盘校验,可以在用户操作客户端过程中,对用户的操作过程进行录制,得到应用录制文件,该应用录制文件可以包括用户操作客户端的具体流程,以及操作图像信息等,本申请对应用录制文件包含的内容不做限定。
以客户端是游戏为例,可以在用户玩游戏过程中,利用游戏客户端的录制功能,进行游戏过程的录制,得到游戏录制文件,此时可以包括游戏操作录像数据、游戏流程等。
步骤S12,客户端将应用录制文件及客户端版本号发送至逻辑服务器;
在实际应用中,对于同一应用,如同一款游戏来说,为了适用于不同的应用平台,可以配置多个版本,不同版本的应用可以具有对应的版本号,记为客户端版本号,当需要对该客户端版本号对应的应用信息进行更新,如活动资源或内容更新,可能会生成适用于当前应用平台的新版本应用,同时会生成新版本应用的客户端版本号,来表示当前应用所使用的客户端。需要说明,本申请对客户端版本号的内容不做限定。
步骤S13,逻辑服务器对应用录制文件进行前置校验;
本实施例中,对应用录制文件的前置校验可以是对其应用属性以及基础数据进行逻辑匹配校验,如果校验通过,可以继续执行后续操作步骤;若校验未通过,逻辑服务器可以直接向客户端反馈校验失败的提示信息,以使得客户端用户能够及时得知客户端运行存在的问题。
以游戏客户端为例,上述前置校验可以包括校验游戏录制文件中的奖励、消耗和一些基础数据是否与逻辑匹配,此处的逻辑可以游戏正常运行的控制规则,如操作游戏运行到什么阶段,对应得到的奖励是多少、所消耗的资源是多少、还有其他基础信息的状态等,这些通常会有一定的规则,本实施例可以基于该规则,得到前置校验的校验依据即上述逻辑,本申请对其内容不作限定。
步骤S14,逻辑服务器在校验通过的情况下,查询与客户端版本号对应的验证版本号,并确定具有该验证版本号的验证服务器;
本实施例中,可以在版本发布过程中,生成客户端版本号与验证版本号之间的映射关系。其中,验证版本号可以在构建版本过程中,通过分析验证逻辑涉及的信息,如代码、资源等,利用该信息生成对应的哈希值sha1,用来实现对客户端的代码、资源等信息的验证,因此,本实施例可以将生成的哈希值sha1作为验证版本号,但验证版本号的内容并不局限于该哈希值,且对该哈希值的内容不做限定。
可选的,如上述分析,适用于不同类型的平台的同一款应用的版本往往不同,因此,本申请在生成客户端版本号与验证版本号之间的映射关系时,可以同时记录客户端当前使用平台的平台类型,即生成客户端版本号、平台类型及验证版本号的映射关系,具体可以将该映射关系写入资源文件,以供逻辑服务器中该资源文件加载该映射关系,本申请对该映射关系的具体表示方式,及其存储方式不做限定。
需要说明,由于客户端仅涉及资源、内容等更新的情况下,验证服务器并不需要更新,可以只更新客户端版本号,所以说,在实际应用中,可能会存在多个客户端版本号对应同一个验证版本号,也就是说,可能会存在多个版本的客户端与同一验证服务器具有映射关系。
基于此,在本实施例实际应用中,逻辑服务器可以加载客户端版本号与验证服务器的验证版本号之间的映射关系,在对当前客户端的前置校验通过的情况下,为了从验证服务器的集群节点列表中,找到合适的验证服务器进行复盘校验,本实施例可以利用该映射关系,查询是否存在与当前客户端的客户端版本号对应的验证版本号,如果存在,可以确定具有该对应的验证版本号的验证服务器,即为复盘校验所需的验证服务器。
应该理解,若逻辑服务器未查询到与客户端版本号对应的验证版本号,或查询到的验证版本号的版本信息已经过期,可以不再执行步骤S15,对于过期的版本信息对应的验证服务器,本申请可以直接删除客户端版本号与该验证版本号之间的映射关系。
由此可见,在步骤S14中,查询到与客户端版本号对应的验证版本号,还可以检测该验证版本号的版本信息是否过期,如果未过期,确定该验证版本号对应的验证服务器,若已过期,直接删除该验证版本号,即删除客户端版本号与该验证版本号之间的映射关系,避免后续再利用该映射关系,查询验证服务器。
步骤S15,逻辑服务器将应用录制文件发送至验证服务器;
步骤S16,验证服务器对应用录制文件进行复盘校验,得到校验结果;
在确定对客户端进行复盘校验的验证服务器后,逻辑服务器可以将客户端发送的应用录制文件转发至该验证服务器,由该验证服务器对应用录制文件进行复盘校验,即还原用户对客户端的操作过程,并对其进行校验,判断该用户是否存在作弊行为等,本申请对应用的复盘校验过程不做详述。
可见,验证服务器实现了对客户端行为的离线完全复盘,不会影响客户端的工作,且本申请选择与客户端版本号匹配的验证服务器,对该客户端行为进行复盘校验,实现了线上多版本兼容,解决了一系列跨平台运行结果一致性的问题。
其中,验证服务器得到的验证结果可以表明客户端行为是否存在用户作弊行为等,本申请对该验证结果的内容及其表示形式不作限定。
步骤S17,验证服务器将校验结果反馈至逻辑服务器;
步骤S18,逻辑服务器将校验结果发送至客户端;
可见,验证服务器对客户端行为进行复盘校验后,会将校验结果通过逻辑服务器反馈至客户端,以使客户端用户及时得知复盘校验结果。
步骤S19,验证服务器将应用录制文件以及校验结果发送至数据存储设备进行存储;
可见,验证服务器对应用录制文件进行校验通过后,可以对被校验的数据落地存储,如本实施例将应用录制文件及其校验结果写入数据存储设备存储,以供后续其他设备调用。关于数据存储设备对应用录制文件的存储方式,本实施例不作限定。
步骤S110,数据分析设备对数据存储设备存储的应用录制文件及其对应的校验结果进行分析;
需要说明,本申请对数据分析设备如何实现内存和逻辑分析的方法不作限定。
步骤S111,数据分析设备基于分析结果,确定应用内容和/或应用逻辑异常,向开发者设备发送提示信息。
本实施例中,在对客户端行为进行复盘校验后,可以在离线状态下,对应用录制文件及其校验结果进行分析,不需要依赖稳定的网络环境,避免了在线分析对流量消耗、电量消耗和手机温度等属性的负面作用,同时也避免了服务器出现卡顿或故障,导致客户端无法进行下去的问题发生。通过对客户端行为的离线完全复盘分析,若发现客户端行为中存在作弊行为,或客户端运行期间的逻辑出现问题等,本实施例还能够及时提醒开发者进行处理,实现对作弊行为的自动化监控告警,以便开发者能够利用应用录制文件进行修复。
可选的,数据分析设备可以生成提示信息后,可以采用邮件、即时信息等方式发送该提示信息,对于开发者设备可以预先绑定,这样,在发现异常的情况下,直接向该开发者设备发送提示信息,但并不局限于这种实现方式。
另外,本实施例提供的应用复盘校验处理方法,能够基于当前客户端版本号,选择相匹配的验证服务器对应用录制文件进行复盘校验,即解决了线上多版本兼容问题,扩大了适用范围。
可选的,在实际应用中,验证服务器的数量往往是多个,可以记为验证服务器集群,而整个验证服务器集群的版本号和平台往往较多,每个版本号和平台可能对应多个校验的服务进程,而每个验证服务进程和逻辑服务进程是有连接关系的,若验证服务进程数量为M个,逻辑服务进程的数量为N个,这两种服务进程所产生的连接关系数量为M*N。
基于这种情况,本实施例通过减少验证服务进程数量,并采用多个工作线程的方式,发挥服务器的多核能力。具体的,如同时有多个客户端上传各自的应用录制文件的场景下,本实施例可以采用多线程模型,减少服务进程数量,即验证服务器可以采用单线程(即主线程)向数据分析设备分发应用录制文件,但采用多线程(即工作线程)实现复盘校验。需要说明,本申请对线程创建及终止方法不做限定。
另外,在验证服务器进行热更新的过程中,如服务器硬件发生变化、版本更新等场景,本申请希望不停服加载新的配置,即保证在资源重新加载的过程中,不会有正在运行的复盘校验流程,否则就可能出现资源访问冲突等问题,因此,在热更新时,验证服务器的主线程可以暂停对应用录制文件的分发,待各工作线程运行结束后,终止所有工作线程,之后,再重新加载资源和配置,重新开启并分配工作线程,本实施例可以通过这种方式实现资源的热更新和工作线程数的热更新,但并不局限于本实施例描述的这种实现方式。
基于上述分析,本申请可以设计基于Context(抽象类)的对象池系统,并采用侵入式智能指针实现资源管理,关于这种资源管理的具体实现方法不做详述。并且,本申请可以通过C++11属性类做编译期关系检查,以实现在客户端开启线程安全,在服务器每次复盘相关的逻辑时仅使用一个线程执行,以关闭线程安全,减小Cache Miss(即缓存未命中)的情况发生。
其中,在引用计数机制的智能指针在实际应用过程中,通常会涉及到循环引用的问题,对此,本申请可以抽象资源释放接口,在完成一次应用操作,如完成一局游戏内容后,可以强制所有对象池中未释放对象的资源释放接口,通过接触引用的方式,断开资源之间的互相引用,达到释放所有对象的目的。
可选的,本申请还可以进一步检测所有的对象是否都被释放,若存在未被释放的对象,可以认为应用程序出现了漏洞,可能会导致资源通过未被释放对象的资源释放接口而泄露,在这种情况下,可以输出告警信息,以便及时发现应用程序的漏洞,并对此进行修复,具体实现过程本实施例不做赘述。
另外,由于应用逻辑执行过程中,定时器往往是不可或缺的,本申请可以使用时间轮定时器,顾名思义,时间轮就像一个轮子,在转动的时候外界会指向轮子不同的区域,该区域就可以被使用。因此,可以将不同时间的定时器按照一定的方法散列到时间轮的不同槽(即时间轮划分的区域)之中,从而可以实现在运转到某个槽时,进行判断该定时器是否已经到达运行时间。
通常情况下,时间轮中的每个槽中的定时器通常以链表形式存储,每次添加的时候可以直接插入到链表的开始,即头插法,所以,在运行到某个槽时,需要遍历一遍链表,以检查是否有到达时间的计时器,如果是,运行相应操作;如果否,可以删除结点。
其中,在实际应用中,以游戏逻辑为例,其通常以逻辑帧为基准,且不会有太长时间的定时器,因此,本实施例可以采用动态增长的一级时间轮机制来实现定时器。并且,在时间轮定时器的每次定时的时间长于当前支持的最大时间范围的情况下,通常需要对时间轮的长度进行扩充。
参照图3所示的时间轮定时器的扩充示意图,但并不局限于图3所展示的时间轮结构,且图3为了方便理解时间轮的扩充,将时间轮定时器的链表展开进行说明,如图3所示,本实施例可以采用每次乘2的倍增方案,扩充时间轮的长度,即每次对时间轮扩充时,可以将游标(即图3中当前时间帧游标,好比是时钟的指针)前的时间器挪到原时间轮长度的后面,以使得本次扩充后的时间轮长度是原时间轮长度的2倍,保证扩充后的时间轮定时器能够满足实际定时任务需求。
可选的,由于验证服务器进行复盘校验过程中,可以对客户端上行内容做防攻击的保护,防止提交过大的数据集。但用户在操作应用过程中,可能会中途离开应用操作场景,如玩家暂时离开游戏场景,在此期间,时间轮定时器会一直运行,导致时间轮定期出现很多的空跑,将会得到一个超出时间的应用录制文件。这种情况下,将无法准确判断得到的该应用录制文件是异常录制还是人工切出。
对此,本实施例提出在应用运行过程中,进入预定状态的情况下,如上文举例的玩家离开游戏场景,使得游戏过程中没有任何自动或人工的行为的运行状态,可以进行逻辑时间暂停,以避免定时器进行空跑。同时,在对应用复盘校验过程中,进入预定状态后,将无法再插入任何行为事件,此时,本实施例可以直接跳帧到下一个有事件的帧上,进一步减少空跑帧,减小中央处理器CPU消耗。
需要说明,本申请对用户操作应用过程中的逻辑时间暂停,以及验证服务器的复盘校验过程中的跳帧的具体实现方法均不作限定。结合上文描述,前者可以依据对应用运行状态,控制时间轮暂停计时,直至应用的运行状态从预定状态恢复到正常状态,触发时间轮继续计时;后者可以对复盘过程的状态以及获取的逻辑帧进行检测,以便在进入预定状态后,控制时间轮在逻辑帧为事件帧之间进行跳帧运行,但并不局限于本文列举的这两种减少时间轮定时器空跑,减少CPU消耗的实现方法。
可选的,为了保证上述实施例描述的应用复盘校验处理方法的可靠运行,本申请可以在逻辑服务器和验证服务器之间,进行客户端版本号与验证版本号之间的版本关系的维护,具体实现过程可以参照图4,示出的本申请实施例提供另一种应用复盘校验处理方法的信令流程图,本实施例主要对版本关系的维护过程进行描述,关于其他步骤可以参照上述实施例相应部分的描述。如图4所示,该方法可以包括但并不局限于以下步骤:
步骤S21,逻辑服务器加载版本映射信息;
其中,版本映射信息可以包括客户端版本号与验证版本号的映射关系,
结合上述实施例的描述,在版本发布时,通常会构建客户端版本号与验证版本号之间的映射关系,关于客户端版本号、验证版本号以及映射关系的构建过程,可以参照上述方法实施例相应部分的描述。
步骤S22,逻辑服务器向验证服务器发送心跳请求;
步骤S23,验证服务器响应心跳请求,得到携带验证版本号的心跳数据包;
步骤S24,验证服务器将心跳数据包反馈至逻辑服务器;
本实施例中,验证服务器支持的验证版本号可以通过定时的同步消息,同步至逻辑服务器中,具体可以采用心跳请求的方式,实现验证服务器与逻辑服务器之间的信息同步,但并不局限于本实施例描述的这种同步方式。
步骤S25,逻辑服务器获取心跳数据包中的验证版本号;
步骤S26,逻辑服务器利用该验证版本号,检测是否存在客户端对应的原验证服务器;如果不存在,进入步骤S27;如果存在,执行步骤S28;
本实施例实际应用中,逻辑服务器从验证服务器同步到的验证版本号,可以是当前阶段验证服务器节点信息表所对应的最新的验证版本号,具体可以包括新增的验证服务器的验证版本号(如新版本发布生成的验证版本号)、原验证服务器更新后的验证版本号,原验证服务器的原验证版本号等等,本申请对心跳数据包携带的验证版本号的内容不做限定。
基于此,为了保证逻辑服务器所加载的客户端版本号与验证版本号之间的映射关系的可靠性,逻辑服务器可以采用定期同步验证服务器的验证版本号的方式,检测其是否具有的验证服务器所具有的各验证版本号,如步骤S26描述的方式,在同步得到验证版本号后,可以利用版本映射信息,查询该验证服务器节点信息表中,是否存在与本次获取的客户端对应的原验证服务器,但并不局限于这种实现方式。
其中,版本映射信息可以包含客户端版本号与验证版本号之间的映射关系。验证服务器节点信息表可以记录该逻辑服务器已同步的验证版本号,确定客户端对应的原验证服务器。
步骤S27,逻辑服务器利用获取的验证版本号及目标客户端版本号,更新版本映射信息;
其中,目标客户端版本号可以是创建该验证版本号(即当前逻辑服务器不存在的验证版本号)时,所发布的版本的客户端版本号,即本次获取的客户端版本号。关于版本发布流程中,相应客户端版本号及验证版本号的获取方法可以参照上述实施例相应部分的描述。
在这种情况下,步骤S27对版本映射信息的更新,实际上可以是创建本次获取的验证版本号及目标客户端版本号之间的映射关系,具体实现方法不做限定。
步骤S28,若所述原验证服务器的验证版本号与心跳数据包中的验证版本号的内容不一致,删除版本映射信息中原验证服务器的验证版本号涉及到的映射关系;
结合上述分析,逻辑服务器通过与验证服务器之间的定期心跳,获取验证服务器最新的验证版本号,并据此核对和更新验证版本号的验证服务器节点信息表,即对于该验证服务器节点信息表中不存在的验证服务器,可以构建获取的验证版本号与客户端版本号之间的映射关系,从而将从心跳数据包中获取的验证版本号对应的验证服务器,更新到该验证服务器节点信息表中。
其中,由于逻辑服务器中的验证版本号从验证服务器同步得到,而验证服务器的验证版本号是会不定期更新的,这就会导致逻辑服务器同步得到的验证版本号会过期,导致获取的验证版本号与逻辑服务器缓存的验证版本号不一致,这种情况下,可以认为该验证服务器节点已经下线,可以删除该验证服务器的验证版本号所涉及到的的映射关系,其包括与目标客户端版本号之间的映射关系。
步骤S29,逻辑服务器未接收到验证服务器反馈的心跳数据包,若未接收次数达到预设次数,删除该验证服务器对应的验证版本号涉及到的映射关系。
本实施例中,若验证服务器或逻辑服务器出现故障,逻辑服务器连续多次向验证服务器发起心跳请求,可能都无法得到验证服务器的响应,这种情况下,也可以认为该验证服务器节点已经下线,可以直接删除客户端版本号与该验证服务器的验证版本号之间的映射关系,即删除该验证服务器的验证版本号所涉及到的映射关系。
需要说明,本申请对上述预设次数的数值不做限定,且上述目标客户端可以是当前向逻辑服务器发送应用录制文件的客户端,可见,对于发送应用录制文件的不同客户端,均可以按照本实施例描述的方法,进行该客户端的客户端版本号与验证版本号之间的映射关系的更新。
综上,逻辑服务器按照上述方式进行版本更新过程中,可以直接删除一部分验证服务器节点,如缓存过期的验证版本号对应的验证服务器,长时间未接收到响应的验证服务器,实现对验证服务器节点信息表的更新,不需要人工干预;且对于这些不可用的验证服务器节点,能够及时进行屏蔽,避免其继续参与应用复盘校验处理步骤。另外,在逻辑服务器与验证服务器之间不断发送的心跳请求过程中,对于恢复正常的验证服务器节点,能够自动恢复节点上线,即更新到逻辑服务器缓存的验证服务器节点信息表,也不需要人工干预,极大提高了工作效率。
可选的,为了保证上述应用复盘校验处理方法中,所涉及到的逻辑功能与平台类型无关,本申请可以对项目中的一些功能的使用进行规范化,即对项目中的某些功能配置一定的约束条件,并提供机制能够检测出可能的问题。本申请对约束条件以及机制内容不做限定。
由于项目通常是采用C++语言生成的,本申请可以先对项目创建过程中所使用的容器及算法进行约束,如本申请可以要求使用有序容器及保证顺序的算法,如vector、list、queue、deque、set、map等容器。而对于unordered_map和unordered_set之类的容器,虽然其哈希算法受到标准约束,但其预分配空间的策略并没有被限定,如某版本的MSVC(MS-VisualC++,可视化C++开发平台)中按照乘以2的方式倍增空间,而GCC(GNU CompilerCollection,GNU编译器)则是扩充到下一个素数,实现空间分配。因此,本实施例往往不会使用这些容器,或仅允许被用来做键值数据库索引,不能被用来实现遍历操作。
另外,为了保证客户端逻辑一致性,本申请可以采用随机数算法构建客户端的逻辑,具体可以利用AI随机数算法,来实现对客户端操作流程的提示,如对游戏玩家下一步操作的提示;同时,利用逻辑随机数算法实现复盘校验时的同步,保证复盘过程中能还原成和第一次运行过程中一致的数据。可见,本申请的应用逻辑使用了分离的AI随机数算法和逻辑随机数算法,保证了逻辑一致性。
由于应用运行及其复盘校验过程中,随机数引擎往往会被频繁调用,为了减少开销,本申请可以使用TAUS88和xoshiro/xoroshiro等引擎,来实现随机数算法的调用,具体实现过程本实施例不做详述,且本申请对使用的随机数引擎不作限定。
其中,上文举例的TAUS88和xoshiro/xoroshiro等随机数引擎,其操作运算通常是个位数的位运算指令条数,TAUS88随机数引擎的操作甚至仅有三次位运算,且,相对于使用梅森旋转算法的随机数引擎,本申请选用的这几种随机数引擎对内存空间的占用,远小于梅森旋转算法对内存空间的占用。
实际应用中,TAUS88随机数引擎的随机性较差,在连续随机的情况下,往往会出现随机数的数值接近的情况下,xoshiro/xoroshiro这两种随机数引擎随机性较好,因此,对于随机性要求较高的逻辑,本申请可以优先选择使用xoshiro/xoroshiro这两种随机数引擎,生成随机数,但并不局限于此。另外,关于如何利用选择的随机数引擎,生成所需的随机数的具体实现过程,本实施例不做详述。
可选的,为了保证应用逻辑与流程的一致性,本申请可以将服务器中,所有的功能接口封装成纯C接口的形式。在服务器中,直接使用C接口进行通信。在客户端,可以提供C#的包装给Unity使用。
以游戏应用为例,对于游戏逻辑内容,可以全部抽象成通信协议的形式,即:将游戏玩家的操作类抽象成上行(命令)协议,对运行中间状态的事件通知,抽象成下行(帧事件)协议,然后通过上行协议和时间轮定时器,来驱动整个核心逻辑的运行,具体实现方法本申请不做详述。
基于此,对于验证服务器而言,其可以不用像客户端那样需要感知所有的中间状态和表现行为,可以只获取一个校验结果,用其进行核对即可。因此,本申请可以封装用于统一处理下行协议打包的流程,并且约定在打包代码块中不允许执行逻辑的非只读接口。本申请对该非只读接口的封装方法不做限定。
基于上述对内存及对象管理、应用逻辑执行、复盘校验等方面的约束,本申请可以实现命令行版本的回放机器人,该回放机器人可以保持与验证服务器相同的验证流程,以便尽早发现逻辑平台问题,及时提醒开发人员进行处理。还可以用于压力测试应用逻辑开销,利用测试结果对验证服务器的性能进行评估,具体实现过程本实施例不作详述。同时,回放机器人还可以获取测试期间的复盘录像文件,据此进行内存分析及校验正确性分析,结合监控系统进行风险告警,如上述数据分析设备在离线状态下分析应用录制文件,及时发现应用内容和/或应用逻辑异常,并及时通知开发者进行处理。
参照图1,本申请实施例还提供的一种应用复盘校验处理系统,该系统可以包括:客户端11、逻辑服务器12及验证服务器13,其中:
逻辑服务器,用于接收客户端发送的应用录制文件,并获取相应的客户端版本号,利用所述客户端版本号映射的验证版本号,确定目标验证服务器,并将所述应用录制文件发送至目标验证服务器;
可选的,如图5所示的结构示意图,该逻辑服务器12可以包括:
前置校验模块121,用于对所述应用录制文件进行前置校验;
查询模块122,用于在前置校验通过的情况下,查询已加载的客户端版本号与验证版本号之间的映射关系,确定本次获取的客户端版本号映射的验证版本号;
选择模块123,用于从具有确定的验证版本号的至少一个验证服务器中,选择目标验证服务器。
可选的,如图5所示,逻辑服务器12还可以包括:
同步模块124,用于同步所述验证服务器的验证版本号;
第一更新模块125,用于依据本次同步到的验证版本号,更新版本映射信息,所述版本映射信息包含客户端版本号与验证版本号之间的映射关系;
第二更新模块126,用于在未从所述验证服务器中同步到验证版本号的情况下,删除版本映射信息中所述验证服务器的验证版本号与客户端版本号之间的映射关系。
可选的,第一更新模块125具体可以包括:
检测单元,用于利用本次同步到的验证版本号,检测是否存在所述客户端对应的原验证服务器;
第一更新单元,用于在检测结果为不存在的情况下,利用本次同步到的验证版本号及本次获取的客户端版本号,更新版本映射信息;
第二更新单元,用于在检测结果为存在,但所述原验证服务器的验证版本号,与本次所同步的验证服务器的验证版本号的内容不一致的情况下,删除版本映射信息中所述原验证服务器的验证版本号涉及到的映射关系。
验证服务器,用于利用应用录制文件进行复盘校验,得到校验结果,并将所述校验结果反馈至所述客户端。
可选的,如图1所示,该系统还可以包括数据存储设备14以及数据分析设备15,其中:
数据存储设备14,用于接收并存储所述验证服务器发送的应用录制文件及校验结果;
可选的,如图6所示,目标验证服务器13可以包括:
数据发送模块131,用于通过单线程向数据存储设备发送应用录制文件;
复盘校验模块132,用于通过多个工作线程,对多个应用录制文件进行复盘校验,得到相应的校验结果,具体实现过程可以参照上述方法实施例相应部分的描述。
作为另一可选实施例,在验证服务器进行热更新的应用场景下,如在发生版本更新,和/或所述验证服务器的硬件结构改变的情况下,如图6所示,验证服务器13还可以包括:
第一控制模块133,用于控制单线程暂停向数据存储设备发送应用录制文件;
检测模块134,用于检测所述多个工作线程结束工作,终止所述多个工作线程;
资源加载模块135,用于加载本次热更新对应的资源文件,并为所述资源文件分配工作线程。
数据分析设备15,用于从所述数据存储设备读取任一应用录制文件,及该应用录制文件的校验结果,并对读取的所述应用录制文件及所述校验结果进行分析,确定应用内容和/或应用逻辑异常,向应用开发者发送提示信息。
可选的,在逻辑服务器的功能实现过程中,具体在执行应用逻辑过程中,可以检测时间轮定时器每次定时的时长是否超过最大时间范围;如果超过,采用动态倍增的方式,对所述时间轮定时器的时间轮长度进行扩充,具体实现过程可以参照方法实施例相应部分的描述。
基于此,上述验证服务器还可以包括:
第二控制模块,用于确定应用进入预定状态的情况下,控制所述时间轮定时器暂停工作;
第三控制模块,用于在所述目标验证服务器进行复盘校验过程中,被复盘的应用过程进入所述预定状态,控制所述时间轮定时器从当前时间帧,跳转到下一个有事件的时间帧继续工作。
需要说明,上述功能模块可以是相应服务器或设备的应用程序模块,其实现相应功能的过程,可以参照上述方法实施例的描述,本实施例对此不做赘述。
本申请实施例还提供了一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行,实现如上所述的应用复盘校验处理方法的各步骤。
需要说明,在应用复盘校验处理方法执行过程中,对于不同的执行主体,可以配置有相应的存储介质,用来实现该执行主体所实现的应用复盘校验处理方法的相应部分,具体实现可以参照上述方法实施例的描述。
另外,本申请还提供了一种服务器的硬件结构示意图,该服务器可以是上述逻辑服务器或验证服务器,如图7所示,该服务器可以包括通信接口31、存储器32及处理器33,其中:
实际应用中,通信接口31、存储器32及处理器33的数量可以为至少一个,且通信接口31、存储器32及处理器33可以通过通信总线实现相互间的通信。
通信接口31可以为通信模块的接口,如GSM模块的接口、WIFI模块的接口、GPRS模块的接口,和/或实现服务器之间、服务器与设备之间的数据传输的接口,可以基于实际需求确定;
处理器33可能是一个中央处理器CPU,或者是特定集成电路ASIC
(Application Specific Integrated Circuit),或者是被配置成实施本申请实施例的一个或多个集成电路。
存储器32可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。
其中,存储器32存储有计算机程序,处理器33调用存储器32所存储的计算机程序,以实现上述应用复盘校验处理方法中相应服务器所实现的方法步骤,具体实现过程可以参照上述方法实施例相应部分的描述,本实施例不再赘述。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置、设备而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的核心思想或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (9)
1.一种应用复盘校验处理方法,其特征在于,包括:
在客户端运行目标游戏应用的过程中,获取所述目标游戏应用的应用录制文件,包括:在检测到所述目标游戏应用处于预定状态的情况下,控制时间轮定时器暂停工作,并停止获取处于所述预定状态下的目标游戏应用的所述应用录制文件,其中,所述应用录制文件中至少包括游戏操作录像数据;
逻辑服务器接收客户端发送的应用录制文件,并获取相应的客户端版本号;
所述逻辑服务器利用所述客户端版本号映射的验证版本号,确定目标验证服务器,并将所述应用录制文件发送至目标验证服务器;
所述目标验证服务器利用所述应用录制文件进行复盘校验,得到校验结果,并将所述校验结果反馈至所述客户端;
所述逻辑服务器执行应用逻辑过程中,检测时间轮定时器每次定时的时长是否超过最大时间范围;如果超过,采用动态倍增的方式,对所述时间轮定时器的时间轮长度进行扩充;
验证服务器确定所述目标游戏应用进入所述预定状态的情况下,控制所述时间轮定时器暂停工作;
在所述目标验证服务器进行复盘校验过程中,被复盘的应用过程进入所述预定状态,控制所述时间轮定时器从当前时间帧,跳转到下一个有事件的时间帧继续工作。
2.根据权利要求1所述的方法,其特征在于,还包括:
所述目标验证服务器将所述应用录制文件及所述校验结果存储至数据存储设备;
数据分析设备从所述数据存储设备读取任一应用录制文件,及该应用录制文件的校验结果;
所述数据分析设备对读取的所述应用录制文件及所述校验结果进行分析,确定应用内容和/或应用逻辑异常,向应用开发者发送提示信息。
3.根据权利要求1所述的方法,其特征在于,所述逻辑服务器利用所述客户端版本号映射的验证版本号,确定目标验证服务器,包括:
所述逻辑服务器对所述应用录制文件进行前置校验;
所述逻辑服务器在前置校验通过的情况下,查询已加载的客户端版本号与验证版本号之间的映射关系,确定本次获取的客户端版本号映射的验证版本号;
所述逻辑服务器从具有确定的验证版本号的至少一个验证服务器中,选择目标验证服务器。
4.根据权利要求1~3任一项所述的方法,其特征在于,还包括:
所述逻辑服务器同步所述验证服务器的验证版本号;
所述逻辑服务器依据本次同步到的验证版本号,更新版本映射信息,所述版本映射信息包含客户端版本号与验证版本号之间的映射关系。
5.根据权利要求4所述的方法,其特征在于,所述逻辑服务器依据本次同步到的验证版本号,更新版本映射信息,包括:
所述逻辑服务器利用本次同步到的验证版本号,检测是否存在所述客户端对应的原验证服务器;
若不存在,利用本次同步到的验证版本号及本次获取的客户端版本号,更新版本映射信息;
若存在,但所述原验证服务器的验证版本号,与本次所同步的验证服务器的验证版本号的内容不一致,删除版本映射信息中所述原验证服务器的验证版本号涉及到的映射关系。
6.根据权利要求4所述的方法,其特征在于,还包括:
所述逻辑服务器未从所述验证服务器中同步到验证版本号,删除版本映射信息中所述验证服务器的验证版本号与客户端版本号之间的映射关系。
7.根据权利要求2所述的方法,其特征在于,所述目标验证服务器将所述应用录制文件及所述校验结果存储至数据存储设备,包括:
所述目标验证服务器通过单线程向数据存储设备发送应用录制文件;
所述目标验证服务器利用所述应用录制文件进行复盘校验,得到校验结果,包括:
所述目标验证服务器通过多个工作线程,对多个应用录制文件进行复盘校验,得到相应的校验结果。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
在验证服务器进行热更新时,控制所述单线程暂停向数据存储设备发送应用录制文件,所述热更新包括版本更新,和/或所述验证服务器的硬件结构改变;
验证服务器检测所述多个工作线程结束工作,终止所述多个工作线程;
验证服务器加载本次热更新对应的资源文件,并为所述资源文件分配工作线程。
9.一种应用复盘校验处理系统,其特征在于,包括:
逻辑服务器,用于接收客户端发送的应用录制文件,并获取相应的客户端版本号,利用所述客户端版本号映射的验证版本号,确定目标验证服务器,并将所述应用录制文件发送至目标验证服务器;
验证服务器,用于利用应用录制文件进行复盘校验,得到校验结果,并将所述校验结果反馈至所述客户端;
所述复盘校验处理系统还用于:在客户端运行目标游戏应用的过程中,获取所述目标游戏应用的应用录制文件,包括:在检测到所述目标游戏应用处于预定状态的情况下,控制时间轮定时器暂停工作,并停止获取处于所述预定状态下的目标游戏应用的所述应用录制文件,其中,所述应用录制文件中至少包括游戏操作录像数据;
所述逻辑服务器执行应用逻辑过程中,检测时间轮定时器每次定时的时长是否超过最大时间范围;如果超过,采用动态倍增的方式,对所述时间轮定时器的时间轮长度进行扩充;验证服务器确定所述目标游戏应用进入所述预定状态的情况下,控制所述时间轮定时器暂停工作;在所述目标验证服务器进行复盘校验过程中,被复盘的应用过程进入所述预定状态,控制所述时间轮定时器从当前时间帧,跳转到下一个有事件的时间帧继续工作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910193906.2A CN109939441B (zh) | 2019-03-14 | 2019-03-14 | 应用复盘校验处理方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910193906.2A CN109939441B (zh) | 2019-03-14 | 2019-03-14 | 应用复盘校验处理方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109939441A CN109939441A (zh) | 2019-06-28 |
CN109939441B true CN109939441B (zh) | 2023-03-14 |
Family
ID=67008854
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910193906.2A Active CN109939441B (zh) | 2019-03-14 | 2019-03-14 | 应用复盘校验处理方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109939441B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112604298B (zh) * | 2020-12-29 | 2022-09-02 | 珠海金山数字网络科技有限公司 | 一种资源更新方法、装置与系统 |
CN112818176B (zh) * | 2021-02-08 | 2023-12-12 | 腾讯科技(深圳)有限公司 | 一种数据处理方法、装置、设备及存储介质 |
CN116594965B (zh) * | 2023-05-16 | 2024-05-07 | 矩阵时光数字科技有限公司 | 一种支持多线程的随机数检测系统及方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001155409A (ja) * | 1999-11-30 | 2001-06-08 | Matsushita Electric Ind Co Ltd | アレイ型ディスク装置のアクセス方法 |
CN101662675A (zh) * | 2009-09-10 | 2010-03-03 | 深圳市万兴软件有限公司 | 一种将ppt转换为视频的方法和系统 |
CN105306434A (zh) * | 2015-09-11 | 2016-02-03 | 北京金山安全软件有限公司 | 程序文件校验方法及装置、服务器和终端 |
CN107451477A (zh) * | 2017-07-28 | 2017-12-08 | 腾讯科技(深圳)有限公司 | 一种恶意程序检测的方法、相关装置及系统 |
CN108279987A (zh) * | 2018-01-19 | 2018-07-13 | 口碑(上海)信息技术有限公司 | 应用程序的版本管理方法及装置 |
CN108479061A (zh) * | 2018-03-29 | 2018-09-04 | 腾讯科技(深圳)有限公司 | 应用的运行数据校验方法、装置、存储介质及服务器 |
-
2019
- 2019-03-14 CN CN201910193906.2A patent/CN109939441B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001155409A (ja) * | 1999-11-30 | 2001-06-08 | Matsushita Electric Ind Co Ltd | アレイ型ディスク装置のアクセス方法 |
CN101662675A (zh) * | 2009-09-10 | 2010-03-03 | 深圳市万兴软件有限公司 | 一种将ppt转换为视频的方法和系统 |
CN105306434A (zh) * | 2015-09-11 | 2016-02-03 | 北京金山安全软件有限公司 | 程序文件校验方法及装置、服务器和终端 |
CN107451477A (zh) * | 2017-07-28 | 2017-12-08 | 腾讯科技(深圳)有限公司 | 一种恶意程序检测的方法、相关装置及系统 |
CN108279987A (zh) * | 2018-01-19 | 2018-07-13 | 口碑(上海)信息技术有限公司 | 应用程序的版本管理方法及装置 |
CN108479061A (zh) * | 2018-03-29 | 2018-09-04 | 腾讯科技(深圳)有限公司 | 应用的运行数据校验方法、装置、存储介质及服务器 |
Also Published As
Publication number | Publication date |
---|---|
CN109939441A (zh) | 2019-06-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108958927B (zh) | 容器应用的部署方法、装置、计算机设备和存储介质 | |
US12079091B2 (en) | Application consistent snapshots as a sidecar of a containerized application | |
CN109939441B (zh) | 应用复盘校验处理方法及系统 | |
CN111610989B (zh) | 一种面向离线容器云环境的应用发布/更新方法及系统 | |
JP5519909B2 (ja) | アプリケーション・プロセスにおいて内部イベントをリプレイするための非侵入的方法およびこの方法を実装するシステム | |
CN110365762B (zh) | 服务处理方法、装置、设备及存储介质 | |
CN106469087B (zh) | 元数据输出方法、客户端和元数据服务器 | |
US20200042406A1 (en) | Continuous replication and granular application level replication | |
CN107710215A (zh) | 在测试设施中的移动计算装置安全的方法和设备 | |
US20160224329A1 (en) | Automated software configuration management | |
US20140214782A1 (en) | Distributed Storage Object Delete | |
CN110895487A (zh) | 分布式任务调度系统 | |
CN107465709B (zh) | 分布式镜像构建任务方法及装置、系统 | |
CN113312153A (zh) | 一种集群部署方法、装置、电子设备及存储介质 | |
US7315959B2 (en) | Real-time remote backup system and related method | |
CN116974874A (zh) | 数据库的测试方法、装置、电子设备及可读存储介质 | |
CN110895486A (zh) | 分布式任务调度系统 | |
CN117724725B (zh) | 持续集成的自动化调度方法、装置、系统和存储介质 | |
Bouchenak et al. | From autonomic to self-self behaviors: The jade experience | |
CN111104404B (zh) | 基于分布式对象的数据存储方法及装置 | |
CN116881012A (zh) | 一种容器应用垂直扩容方法、装置、设备及可读存储介质 | |
US20220182290A1 (en) | Status sharing in a resilience framework | |
KR101690066B1 (ko) | 온라인 게임 패치를 위한 서버, 시스템 및 그 방법 | |
CN115617668A (zh) | 一种兼容性测试方法、装置及设备 | |
CN114996955A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |