掌桥专利:专业的专利平台
掌桥专利
首页

虚拟场景中的行为控制方法、装置、设备及存储介质

文献发布时间:2024-04-18 19:52:40


虚拟场景中的行为控制方法、装置、设备及存储介质

技术领域

本申请涉及虚拟场景技术,尤其涉及一种虚拟场景中的行为控制方法、装置、设备及存储介质。

背景技术

基于图形处理硬件的显示技术,扩展了感知环境以及获取信息的渠道,尤其是虚拟场景的显示技术,能够根据实际应用需求实现受控于用户或人工智能的虚拟对象之间多样化的交互,具有各种典型的应用场景,例如在游戏这一虚拟场景中,能够模拟虚拟角色之间的真实的对战过程。

以虚拟场景为游戏为例,为了提升玩家体验,一般会在游戏中加入非用户角色,即拟人化的人工智能(AI,Artificial Intelligence)对象,对AI对象的合理控制,能够提升交互体验。

相关技术中,主要通过行为树的方式控制AI对象的行为,然而,行为树适合于简单游戏,针对复杂的游戏,规则编写比较困难,难以覆盖所有场景;为此,相关技术基于面向连接的通讯协议(如传输控制协议(TCP,Transmission Control Protocol))实现服务器与AI对象的通讯,以根据对局的实时运行情况对AI对象的表现进行调整;然而,这种方式需要维护服务器与AI对象的连接建立和心跳保活,设计比较复杂,同时占用较多机器资源,针对AI对象的控制效率低。

发明内容

本申请实施例提供一种虚拟场景中的行为控制方法、装置、电子设备、计算机可读存储介质及计算机程序产品,能够提高针对非用户角色的控制效率,节约硬件处理资源。

本申请实施例的技术方案是这样实现的:

本申请实施例提供一种虚拟场景中的行为控制方法,包括:

接收到虚拟场景中的非用户角色基于第一无连接协议发送的请求消息,所述请求消息携带所述非用户角色与真实玩家角色在交互对局中的交互数据;

基于所述交互数据,对所述非用户角色在所述交互对局中的交互行为进行预测,得到所述非用户角色的目标交互行为;

基于所述目标交互行为,生成对应所述请求消息的响应消息,其中,所述响应消息携带用于指示所述非用户角色执行所述目标交互行为的行为控制指令;

基于第二无连接协议返回所述响应消息至所述非用户角色,以使所述非用户角色基于所述行为控制指令执行所述目标交互行为。

本申请实施例提供一种虚拟场景中的行为控制装置,包括:

接收模块,用于接收到虚拟场景中的非用户角色基于第一无连接协议发送的请求消息,所述请求消息携带所述非用户角色与真实玩家角色在交互对局中的交互数据;

预测模块,用于基于所述交互数据,对所述非用户角色在所述交互对局中的交互行为进行预测,得到所述非用户角色的目标交互行为;

生成模块,用于基于所述目标交互行为,生成对应所述请求消息的响应消息,其中,所述响应消息携带用于指示所述非用户角色执行所述目标交互行为的行为控制指令;

返回模块,用于基于第二无连接协议返回所述响应消息至所述非用户角色,以使所述非用户角色基于所述行为控制指令执行所述目标交互行为。

上述方案中,所述接收到虚拟场景中的非用户角色基于第一无连接协议发送的请求消息之前,所述装置还包括:创建模块,用于创建用于与所述非用户角色进行通讯的套接字,并将所述套接字与服务器的互联网协议网址和端口号进行绑定;所述接收模块,还用于通过绑定后的所述套接字,接收到虚拟场景中的非用户角色基于第一无连接协议发送的请求消息;所述接收到虚拟场景中的非用户角色基于无连接协议发送的请求消息之后,所述装置还包括:关闭模块,用于关闭所述套接字,以禁止通过所述套接字接收除所述请求消息之外的其他请求信息。

上述方案中,所述请求消息携带业务标识,所述装置还包括:确定模块,用于基于所述业务标识,确定所述业务标识对应的目标预测服务;所述预测模块,还用于通过所述目标预测服务中的行为预测模型,基于所述交互数据,对所述非用户角色在所述交互对局中的交互行为进行预测,得到所述非用户角色的目标交互行为;其中,所述行为预测模型是基于交互数据样本、所述交互数据样本标注的交互行为训练得到的。

上述方案中,所述基于所述业务标识,确定所述业务标识对应的目标预测服务之前,所述装置还包括:构建模块,用于构建业务标识与预测服务之间的映射关系,所述业务标识与所述预测服务呈一一对应关系;所述确定模块,还用于基于所述映射关系及所述业务标识,从多个预测服务中筛选出与所述业务标识相适配的目标预测服务。

上述方案中,所述通过所述目标预测服务,基于所述交互数据,对所述非用户角色在所述交互对局中的交互行为进行预测之前,所述装置还包括:消息发送模块,用于对所述请求消息进行解析,得到所述请求消息携带的所述交互数据、所述交互对局的对局标识和业务标识;根据所述对局标识,在对局哈希池中获取所述对局标识对应的对局结点,并根据所述业务标识,查找所述业务标识对应的请求处理函数;通过所述请求处理函数,获取所述目标预测服务的链接地址,并对所述对局结点进行线程数据分配和线程结点分配,得到所述对局结点对应的业务线程数据元素和业务线程结点;基于所述对局标识和所述业务标识,初始化所述业务线程数据元素,并基于所述业务线程结点的结点标识,绑定所述业务线程数据元素与所述业务线程结点;根据所述交互数据、所述目标预测服务的链接地址及初始化后的所述业务线程数据元素,对所述业务线程结点进行封装,得到业务线程请求消息,并将所述业务请求消息发送至所述目标预测服务,以使所述目标预测服务基于所述业务请求消息,对所述非用户角色在所述交互对局中的交互行为进行预测。

上述方案中,所述生成模块,还用于当接收到所述目标预测服务返回的针对所述业务请求消息的预测数据包时,通过所述对局结点对应的回调函数,从所述业务线程结点获取所述对局标识和所述业务标识;当基于所述对局标识从所述对局哈希池中查找到所述对局结点、以及基于所述预测数据包确定所述目标预测服务成功处理所述业务请求消息时,根据所述业务标识查找所述业务标识对应的响应处理函数;当通过所述响应处理函数遍历所述对局哈希池查找到对应的业务线程数据元素时,根据查找到的所述业务线程数据元素及所述预测数据包进行组装,生成对应所述请求消息的响应消息。

上述方案中,所述装置还包括:释放模块,用于当满足业务释放条件时,释放所述业务线程结点绑定的业务线程数据元素、以及所述业务线程结点;其中,所述业务释放条件包括以下至少之一:基于所述对局标识从所述对局哈希池中未查找到所述对局结点、基于所述预测数据包确定所述目标预测服务未成功处理所述业务请求消息、调用所述响应处理函数未查找到对应的业务线程数据元素;当所述对局结点对应的所有请求消息均被执行完毕时,释放所述对局结点。

上述方案中,所所述返回模块,还用于从所述业务线程数据元素中获取所述非用户角色对应的套接字地址;基于第二无连接协议,返回所述响应消息至所述非用户角色对应的套接字地址。

上述方案中,所述装置还包括:标记模块,用于当通过所述请求处理函数对所述对局结点进行线程结点分配失败时,对所述对局结点标记重试标识。

上述方案中,所述装置还包括:重试模块,用于基于所述对局哈希池的大小以及每次扫描对局结点的比例,确定每次扫描所述对局哈希池中对局结点的数量;从上次扫描结束时所述对局哈希池中的结点索引开始执行以下处理:当所述结点索引小于所述对局哈希池中的最大结点数量时,获取所述结点索引对应的对局结点;当所述对局结点已被处理、且对应的部分请求消息未被执行完毕时,获取所述对局结点最后接收所述非用户角色发送的请求消息的持续时长;当所述持续时长不超过目标时长、且所述对局结点携带有重试标识时,对所述对局结点重新分配相应的业务线程结点,并增加结点扫描数;当增加后的结点扫描数大于每次扫描所述对局哈希池中对局结点的数量时,结束本次扫描,并记录所述对局结点的结点索引作为下次扫描的起点。

上述方案中,所述重试模块,还用于当所述结点索引大于或等于所述对局哈希池中的最大结点数量时,将所述结点索引重置为零,并开始下一次扫描;当所述对局结点对应的所有请求消息均被执行完毕,或当所述持续时长超过目标时长时,释放所述对局结点,并增加结点扫描数;当所述对局结点未被处理、或当增加后的结点扫描数不大于每次扫描所述对局哈希池中对局结点的数量时,增加所述对局结点对应的结点索引。

本申请实施例提供一种电子设备,包括:

存储器,用于存储计算机可执行指令或者计算机程序;

处理器,用于执行所述存储器中存储的计算机可执行指令或者计算机程序时,实现本申请实施例提供的虚拟场景中的行为控制方法。

本申请实施例提供一种计算机可读存储介质,存储有计算机可执行指令或者计算机程序,用于被处理器执行时实现本申请实施例提供的虚拟场景中的行为控制方法。

本申请实施例提供一种计算机程序产品,包括计算机程序或计算机可执行指令,所述计算机程序或计算机可执行指令被处理器执行时,实现本申请实施例提供的虚拟场景中的行为控制方法。

本申请实施例具有以下有益效果:

应用本申请实施例,接收到非用户角色发送的请求消息之后,通过请求消息中携带的非用户角色与真实玩家角色的交互数据,对非用户角色的交互行为进行预测,得到相应的目标交互行为,并将基于目标交互行为生成的携带行为控制指令的响应消息发送至非用户角色,使得非用户角色能够基于行为控制指令,执行相应的目标交互行为;如此,能够实时调整非用户角色的交互行为,实现针对非用户角色的快速控制,提高了非用户角色的智能化、随机应变能力以及真实性;此外,服务器与非用户角色通过无连接协议进行通讯,避免了服务器与非用户角色之间的连接建立和心跳保活,这种轻量的服务器框架,大大降低了设计的复杂性,提高了针对非用户角色的控制效率,减少了硬件资源的占用,提高了硬件资源利用率。

附图说明

图1是本申请实施例提供的虚拟场景中的行为控制系统100的架构示意图;

图2是本申请实施例提供的用于实现虚拟场景中的行为控制方法的电子设备500的结构示意图;

图3是本申请实施例提供的虚拟场景中的行为控制方法的流程示意图;

图4是本申请实施例提供的虚拟场景中的行为控制方法的流程示意图;

图5是本申请实施例提供的行为树控制方式示意图;

图6是本申请实施例提供的中控服务器和拟人化AI通讯的协议框架图;

图7是本申请实施例提供的轻量服务器的交互流程图;

图8是本申请实施例提供的轻量服务器的初始化流程示意图;

图9是本申请实施例提供的轻量服务器处理消息的流程示意图;

图10是本申请实施例提供的资源释放流程示意图。

具体实施方式

为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。

可以理解的是,在本申请实施例中,涉及到用户信息等相关的数据(例如用户的账号数据、历史交互数据等),当本申请实施例运用到具体产品或技术中时,需要获得用户许可或者同意,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。

在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。

在以下的描述中,所涉及的术语“第一第二…”仅仅是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一第二…”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。

除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。

对本申请实施例进行进一步详细说明之前,对本申请实施例中涉及的名词和术语进行说明,本申请实施例中涉及的名词和术语适用于如下的解释。

1)客户端,终端中运行的用于提供各种服务的应用程序,例如即时通讯客户端、游戏客户端等。

2)虚拟场景,是应用程序在终端上运行时显示(或提供)的虚拟场景,该虚拟场景可以是对真实世界的仿真环境,也可以是半仿真半虚构的虚拟环境,还可以是纯虚构的虚拟环境。虚拟场景可以是二维虚拟场景、2.5维虚拟场景或者三维虚拟场景中的任意一种,本申请实施例对虚拟场景的维度不加以限定。例如,该虚拟场景中可以包括天空、陆地、海洋等,该陆地可以包括沙漠、城市等环境元素,用户可以控制虚拟对象在该虚拟场景中进行移动。

基于上述对本申请实施例中涉及的名词和术语的解释,下面说明本申请实施例提供的虚拟场景中的行为控制系统。参见图1,图1是本申请实施例提供的虚拟场景中的行为控制系统100的架构示意图,终端400通过网络300连接服务器200,网络300可以是广域网或者局域网,又或者是二者的组合。

在一些实施例中,终端400,部署有支持虚拟场景的客户端(如即时通讯客户端、游戏客户端等),用于显示虚拟场景的界面,如显示非用户角色(即拟人化AI)和真实玩家角色在虚拟场景中进行交互的交互画面。在非用户角色与真实玩家角色在交互对局交互过程中,终端中的非用户角色基于第一无连接协议发送携带交互数据的请求消息至服务器200;

服务器200接收到非用户角色发送的请求消息后,基于请求消息携带的交互数据,对非用户角色在交互对局中的交互行为进行预测,得到非用户角色的目标交互行为;基于目标交互行为,生成对应请求消息的响应消息,其中,响应消息携带用于指示非用户角色执行目标交互行为的行为控制指令;基于第二无连接协议返回响应消息至终端中的非用户角色,以使非用户角色基于行为控制指令执行目标交互行为,终端400显示非用户角色基于行为控制指令执行目标交互行为的过程。

在一些实施例中,服务器200可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content DeliveryNetwork,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。终端400可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能电视、智能手表、车载终端等,但并不局限于此。本申请实施例提供的电子设备可以实施为终端,也可以实施为服务器,终端和服务器上均可设置有用于对虚拟场景在进行渲染的渲染器,如第一渲染器和第二渲染器。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请实施例中不做限制。

在另一些实施例中,本申请实施例可以借助于云技术(Cloud Technology)实现,云技术是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。云技术是基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、以及应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络系统的后台服务需要大量的计算、存储资源。

参见图2,图2是本申请实施例提供的用于实现虚拟场景中的行为控制方法的电子设备500的结构示意图,其中,图2所示出的电子设备500可以是图2中的服务器200或者终端,以电子设备为500为图1中的服务器为例,图2所示的电子设备500包括:至少一个处理器410、存储器450、至少一个网络接口420。电子设备500中的各个组件通过总线系统440耦合在一起。可理解,总线系统440用于实现这些组件之间的连接通信。总线系统440除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图2中将各种总线都标为总线系统440。

处理器410可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。

存储器450可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器450可选地包括在物理位置上远离处理器410的一个或多个存储设备。

存储器450包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(ROM,Read Only Memory),易失性存储器可以是随机存取存储器(RAM,Random Access Memory)。本申请实施例描述的存储器450旨在包括任意适合类型的存储器。

在一些实施例中,存储器450能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。

操作系统451,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;

网络通信模块452,用于经由一个或多个(有线或无线)网络接口420到达其他电子设备,示例性的网络接口420包括:蓝牙、无线相容性认证(WiFi,Wireless Fidelity)、和通用串行总线(USB,Universal Serial Bus)等。

在一些实施例中,本申请实施例提供的虚拟场景中的行为控制装置可以采用软件方式实现,图2示出了存储在存储器450中的虚拟场景中的行为控制装置455,其可以是程序和插件等形式的软件,包括以下软件模块:接收模块4551、预测模块4552、生成模块4553和返回模块4554,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。将在下文中说明各个模块的功能。

在另一些实施例中,本申请实施例提供的虚拟场景中的行为控制装置可以采用硬件方式实现,作为示例,本申请实施例提供的虚拟场景中的行为控制装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本申请实施例提供的虚拟场景中的行为控制方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(ASIC,Application Specific Integrated Circuit)、DSP、可编程逻辑器件(PLD,ProgrammableLogic Device)、复杂可编程逻辑器件(CPLD,Complex Programmable Logic Device)、现场可编程门阵列(FPGA,Field-Programmable Gate Array)或其他电子元件。

在一些实施例中,终端或服务器可以通过运行各种计算机可执行指令或计算机程序来实现本申请实施例提供的虚拟场景中的行为控制方法,举例来说,计算机可执行指令可以是微程序级的命令、机器指令或软件指令,计算机程序可以是操作系统中的原生程序或软件模块;可以是本地(Native)应用程序(APP,APPlication),即需要在操作系统中安装才能运行的程序,例如射击类游戏APP或社交聊天APP(即上述的客户端);也可以是能够嵌入至任意APP中的小程序,即只需要下载到浏览器环境中就可以运行的程序。总而言之,上述的计算机可执行指令可以是任意形式的指令,计算机程序可以是任意形式的应用程序、模块或插件。

将结合本申请实施例提供的服务器或终端的示例性应用和实施,说明本申请实施例提供的虚拟场景中的行为控制方法。

参见图3,图3是本申请实施例提供的虚拟场景中的行为控制方法的流程示意图,将结合图3示出的步骤101至步骤104进行说明,本申请实施例提供的虚拟场景中的行为控制方法可以由服务器或终端单独实施,或者由服务器及终端协同实施,下面将以服务器单独实施进行说明。

在步骤101中,服务器接收到虚拟场景中的非用户角色基于第一无连接协议发送的请求消息,其中,请求消息携带非用户角色与真实玩家角色在交互对局中的交互数据。

在实际应用中,虚拟场景中的非用户角色与真实玩家角色之间往往存在一场或多场交互对局,在从交互对局的开始到结束的整个过程中,非用户角色能够实时采集与真实玩家角色之间的交互数据,为了能够做出针对真实玩家角色的交互反馈,非用户角色可以采用消息传输方式将采集的交互数据发送至服务器,服务器在接收到非用户角色发送的请求消息后,对请求消息中的交互数据进行处理,并将处理结果再次以消息的传输方式回传至非用户角色,非用户角色基于处理结果可执行相应的交互行为;如此,服务器作为非用户角色的控制大脑,能够控制非用户角色针对虚拟场景中玩家的行为做出相应的反馈。

在一些实施例中,服务器在接收到虚拟场景中的非用户角色基于第一无连接协议发送的请求消息之前,还可先创建用于与非用户角色进行通讯的套接字,并将套接字与服务器的互联网协议网址和端口号进行绑定;相应的,服务器可通过如下方式接收到虚拟场景中的非用户角色基于第一无连接协议发送的请求消息:通过绑定后的套接字,接收到虚拟场景中的非用户角色基于第一无连接协议发送的请求消息;相应的,服务器在接收到虚拟场景中的非用户角色基于第一无连接协议发送的请求消息之后,还可关闭套接字,以禁止通过套接字接收除请求消息之外的其他请求信息。

在实际应用中,服务器需要预先申请共享内存作为对局哈希池,用于存储交互对局的对局标识、接收请求消息的时间戳、非用户角色的套接字地址、预测服务对应的链接地址等,从配置文件读取接收缓存大小和发送缓存大小,并动态分配接收缓存和发送缓存,还动态申请线程池,并初始化线程网络库。然后,调用系统函数epoll_create创建epoll,设置epoll的事件处理函数,主要包括READ(接收数据)、WRITE(发送数据)、ERROR(发生错误)。初始化socket,也就是调用系统函数socket创建套接字fd,调用系统函数bind将套接字和服务器的IP地址和端口号(如使用端口9231)绑定起来,调用系统函数listen函数让套接字进入被动侦听状态。将上步骤的侦听套接字listenfd注册到epoll中,从而使用epoll的多路复用功能处理非用户角色的请求(即发送的请求消息)。

服务器定时调用系统函数epoll_wait来检测事件的产生(如检测非用户角色是否发送请求消息),并调用系统函数recvfrom接收非用户角色发送的请求消息,并基于第一无连接协议获取非用户角色的套接字地址,其中,第一无连接协议用于约束请求消息的内容格式,第一无连接协议中包括源端口号(即拟人化AI的套接字地址)、服务器的互联网协议网址和目的端口号(即服务器的套接字地址)、包长度(用于限定传输消息的长度)、校验和(用于校验数据是否出错)、以及交互数据对应的数据字段。

服务器接收到非用户角色发送的请求消息后,可对请求消息进行解析,以得到请求消息携带的交互数据,以供后续对非用户角色的交互行为进行预测。

而且,服务器接收到非用户角色发送的请求消息后,即可关闭相应的套接字,即一个请求对应一个链接,一个链接只处理一个请求,请求处理好后就断开相应的链接,无需一直维持链接直至对局结束;可见,非用户角色与服务器之间的通讯是基于无连接协议的,即两者之间无需事先建立通讯连接即可直接通讯,避免了服务器与非用户角色之间的连接建立和心跳保活造成的设计复杂性,这种轻量的服务器框架减少了硬件资源的占用,提高了硬件资源利用率。

在步骤102中,基于交互数据,对非用户角色在交互对局中的交互行为进行预测,得到非用户角色的目标交互行为。

在一些实施例中,请求消息还可携带业务标识,参见图4,图4是本申请实施例提供的交互行为的预测示意图,图3中的步骤102可通过图4中的步骤1021-步骤1022来实现:

在步骤1021中,基于业务标识,确定业务标识对应的目标预测服务。

在实际应用中,服务器中可以部署有一个或多个预测服务,当然预测服务还可以单独部署在其他服务器上。不同的预测服务用于预测不同的交互行为,如预测服务1用于预测非用户角色在虚拟场景中的移动路径,预测服务2用于预测非用户角色在虚拟场景中的技能释放,每个预测服务具有相应的业务标识(Business ID)。非用户角色发送的请求消息中携带有处理自身交互数据的业务标识,服务器通过该业务标识从多个预测服务中筛选相适配的目标预测服务。

在一些实施例中,服务器在基于业务标识,确定业务标识对应的目标预测服务之前,还可构建业务标识与预测服务之间的映射关系,其中,业务标识与所述预测服务呈一一对应关系;相应的,服务器可通过如下方式基于业务标识,确定业务标识对应的目标预测服务:基于映射关系及业务标识,从多个预测服务中筛选出与业务标识相适配的目标预测服务。

在步骤1022中,通过目标预测服务中的行为预测模型,基于交互数据对非用户角色在交互对局中的交互行为进行预测,得到非用户角色的目标交互行为。

在应用行为预测模型之前,需要训练初始的行为预测模型,然后将训练好的行为预测模型投入应用,以实现结合非用户角色对应的交互数据,通过人工智能技术预测非用户角色的目标交互行为。

其中,行为预测模型是基于交互数据样本、交互数据样本标注的交互行为预先训练得到的,例如,基于交互数据样本(如非用户角色样本在虚拟场景中交互的交互数据)、以及标注的交互行为,调用初始的行为预测模型进行预测处理,得到预测的交互行为,通过预测的交互行为以及标注的交互行为,确定行为预测模型的损失函数的值后,可以判断损失函数的值是否超出预设阈值,当损失函数的值超出预设阈值时,基于损失函数确定行为预测模型的误差信号,将误差信号在行为预测模型中反向传播,并在传播的过程中更新各个层的模型参数。本申请实施例并不限定行为预测模型的模型结构,例如行为预测模型可以是卷积神经网络、深度神经网络等;也并不局限于损失函数的形式,例如可以是交叉熵损失函数、L2损失函数等。

在步骤103中,基于目标交互行为,生成对应请求消息的响应消息,其中,响应消息携带用于指示非用户角色执行目标交互行为的行为控制指令。

在实际应用中,服务器可基于预测得到的目标交互行为,生成行为控制指令,并对行为控制指令进行封装,得到用于反馈至非用户角色的响应消息。其中,在封装行为控制指令时,可按照第二无连接协议指示的数据格式进行封装,其中,第二无连接协议与第一无连接协议均是用于实现无连接通讯的协议,第二无连接协议用于约束返回至非用户角色的响应消息的内容格式,第二无连接协议中包括服务器的套接字地址、非用户角色的套接字地址、包长度(用于限定传输消息的长度)、校验和(用于校验数据是否出错)、以及目标交互形式对应的数据字段。

在步骤104中,基于第二无连接协议返回响应消息至非用户角色,以使非用户角色基于行为控制指令执行目标交互行为。

这里,服务器将生成的响应消息通过第二无连接协议返回至非用户角色后,非用户角色即可对响应消息进行解析,并执行解析得到的行为控制指令所指示的目标交互行为。

接下来对当目标预测服务部署在其他服务器上时,服务器与目标预测服务之间的通讯进行说明。在一些实施例中,服务器通过目标预测服务,基于交互数据对非用户角色在交互对局中的交互行为进行预测之前,还可通过如下方式将携带交互数据的业务线程请求消息发送至目标预测服务:对请求消息进行解析,得到请求消息携带的交互数据、交互对局的对局标识和业务标识;根据对局标识,在对局哈希池中获取对局标识对应的对局结点,并根据业务标识,查找业务标识对应的请求处理函数;通过请求处理函数,获取目标预测服务的链接地址,并对对局结点进行线程数据分配和线程结点分配,得到对局结点对应的业务线程数据元素和业务线程结点;基于对局标识和所述业务标识,初始化业务线程数据元素,并基于业务线程结点的结点标识,绑定业务线程数据元素与业务线程结点;根据交互数据、目标预测服务的链接地址及初始化后的业务线程数据元素,对业务线程结点进行封装,得到业务线程请求消息,并将业务请求消息发送至目标预测服务,以使目标预测服务基于业务请求消息,对非用户角色在交互对局中的交互行为进行预测。

这里,服务器定时调用系统函数epoll_wait来检测非用户角色是否发送请求消息,当服务器接收到非用户角色发送的请求消息后,对请求消息进行解析,得到请求消息携带的非用户角色的套接字地址、交互数据、交互对局的对局标识和业务标识(用于指示执行哪种预测服务);然后,根据对局标识,从对局哈希池中查找相应的对局结点,当在对局哈希池中查找到对局结点时,设置对局结点的对局标识,并更新最近一次接收到非用户角色请求消息的时间戳,当在对局哈希池中未查找到对局结点时,则在对局哈希池中申请新的对局结点,并初始化。

然后,根据业务标识查找业务标识对应的请求处理函数,通过请求处理函数,获取目标预测服务的链接地址,并对对局结点进行线程数据分配和线程结点分配,得到对局结点对应的业务线程数据元素和业务线程结点,其中,业务线程数据元素用于记录处理非用户角色发送的该条请求消息对应的业务线程对应的数据,包括业务标识、非用户角色的套接字地址、服务器的IP地址和端口号、目标预测服务的链接地址(如URL);业务线程结点用于处理非用户角色发送的该条请求消息。在对局结点的业务线程数据元素中记录业务线程结点的结点标识,即可实现业务线程数据元素和业务线程结点的绑定。

在绑定后,即可根据解析处的非用户角色发送的请求消息,填充业务线程结点,如根据对局标识、业务标识、签名计算、请求消息中的交互数据、目标预测服务的URL、超时时间设置(如将超时时间设置为60秒,如60秒内不响应,则关闭线程结点)等,对业务线程结点进行封装,得到业务线程请求消息,并将业务线程请求消息通过超文本传输协议(HTTP,Hyper Text Transfer Protocol)发送至目标预测服务,目标预测服务接收到业务线程请求消息后,即可基于业务线程请求消息中的交互数据对非用户角色的交互行为进行预测,并将预测结果(如预测数据包)返回至服务器中。

在一些实施例中,服务器可通过如下方式基于目标交互行为,生成对应请求消息的响应消息:当接收到目标预测服务返回的针对业务请求消息的预测数据包时,通过对局结点对应的回调函数,从业务线程结点获取对局标识和业务标识;当基于对局标识从对局哈希池中查找到对局结点、以及基于预测数据包确定目标预测服务成功处理业务请求消息时,根据业务标识查找业务标识对应的响应处理函数;当通过响应处理函数遍历对局哈希池查找到对应的业务线程数据元素时,根据查找到的业务线程数据元素及预测数据包进行组装,生成对应请求消息的响应消息。

这里,当服务器接收到目标预测服务返回的预测数据包后,从业务线程结点获取对局标识和业务标识;根据对局标识,从对局哈希池查找对局结点,并判断是否在对局哈希池中查找到对局结点,若查找得到的,则基于第二无连接协议,根据查找到的业务线程数据元素(如对局标识、业务标识)及目标预测服务返回的预测数据包进行组装,得到对应请求消息(即反馈至非用户角色)的响应消息。

在一些实施例中,服务器可通过如下方式基于第二无连接协议返回响应消息至非用户角色:从业务线程数据元素中获取非用户角色对应的套接字地址;基于无连接协议,返回响应消息至非用户角色对应的套接字地址。

这里,业务线程数据元素中记录有非用户角色的套接字地址,在生成用于反馈至非用户角色的响应消息后,即可将响应消息发送至非用户角色对应的套接字地址,实现响应消息的反馈。

在一些实施例中,当满足业务释放条件时,释放业务线程结点绑定的业务线程数据元素、以及业务线程结点;其中,业务释放条件包括以下至少之一:基于对局标识从对局哈希池中未查找到对局结点、基于预测数据包确定目标预测服务未成功处理业务请求消息、调用响应处理函数未查找到对应的业务线程数据元素;当对局结点对应的所有请求消息均被执行完毕时,释放对局结点。

这里,若在对局哈希池中未查找到对局结点,则释放业务线程结点,当目标预测服务未成功处理好服务器发送的业务线程请求消息,或者,对局结点所有的业务线程请求都完成了,即可释放业务线程数据元素。

在一些实施例中,当通过请求处理函数对对局结点进行线程结点分配失败时,对对局结点标记重试标识。

这里,当分配线程节点失败时,则标识重试,然后结束当前处理流程,服务器会定时对标识重试的业务再次处理。

在一些实施例中,服务器还可基于对局哈希池的大小以及每次扫描对局结点的比例,确定每次扫描对局哈希池中对局结点的数量;从上次扫描结束时对局哈希池中的结点索引开始执行以下处理:当结点索引小于对局哈希池中的最大结点数量时,获取结点索引对应的对局结点;当对局结点已被处理、且对应的部分请求消息未被执行完毕时,获取对局结点最后接收非用户角色发送的请求消息的持续时长;当持续时长不超过目标时长、且对局结点携带有重试标识时,对对局结点重新分配相应的业务线程结点,并增加结点扫描数;当增加后的结点扫描数大于每次扫描对局哈希池中对局结点的数量时,结束本次扫描,并记录对局结点的结点索引作为下次扫描的起点。

在一些实施例中,当结点索引大于或等于对局哈希池中的最大结点数量时,将结点索引重置为零,并开始下一次扫描;当对局结点对应的所有请求消息均被执行完毕,或当持续时长超过目标时长时,释放对局结点,并增加结点扫描数;当对局结点未被处理、或当增加后的结点扫描数不大于每次扫描对局哈希池中对局结点的数量时,增加对局结点对应的结点索引。

例如,从上次扫描结束的对局哈希池的结点索引开始,循环处理以下步骤:判断对局结点的结点索引是否大于等于对局哈希池最大结点数量。如果结点索引大于等于对局哈希池最大结点数量,结点索引重置为0,开始新一轮扫描;否则,从对局哈希池取出对应索引的对局结点。然后,判断对局结点是否被使用,若对局结点未被使用,或则结点索引加1,继续处理下一个对局结点;若该对局结点被使用时,进一步判断对局结点所有的业务线程请求是否都完成,若均完成,则释放对局结点,若未均完成,则判断对局结点最后接收拟人化AI消息的时间是否大于配置的超时时间,若是,则释放对局节点,若否,则遍历对局结点所有的业务线程数据元素,尝试重新从线程池分配业务线程结点;若完成对局结点所有的业务线程数据元素的重试后,结点扫描数加1,并判断结点扫描数是否大于每次扫描的对局结点数量,其中,服务器通过从配置文件中读取的对局哈希池的大小与每次扫描对局结点的比例之间的乘积作为每次扫描对局哈希池的结点数量;如果结点扫描数不大于每次扫描的对局结点数量,结点索引加1,继续处理下一个对局结点;否则,记录完成扫描的对局结点索引,作为下次扫描的起点,结束本次扫描处理。如此,通过定时检查对局结点处理请求消息的进度,释放超时资源,能够提高对局哈希池和线程池的使用效率。

下面,将说明本申请实施例在一个实际的应用场景中的示例性应用。以虚拟场景为游戏为例,相关技术中,为了提升玩家体验,游戏中通常会加入拟人化AI(即上述的非用户角色或AI对象),并通过行为树的方式控制拟人化AI在游戏中的行为。参见图5,图5是本申请实施例提供的行为树控制方式示意图,在相关技术中,行为树是由行为节点组成的树状结构,每个节点表示一个行为。在行为树中,节点是有层次的,子节点由其父节点来控制,每个节点的执行都有一个结果(如成功、失败或运行),该节点的执行结果都由其父节点来管理,从而决定接下来做什么,父节点的类型决定了不同的控制类型。节点不需要维护向其他节点的转换,节点的模块性被大大增强了。实际上,在行为树中,由于节点不再有转换,它们不再是状态,而是行为。由此可见,行为树的主要优势之一就是其更好的封装性和模块性,让游戏逻辑更直观。然而,这种行为树适合于简单游戏,成本低,可快速实现和调试,但对于复杂的游戏,规则编写比较困难,难以覆盖所有场景,即在复杂的游戏对局中,针对拟人化AI对象的控制往往不是行为树中简单的条件可以回答的,而是由多个因素决定的。例如在追击敌人时,需要考虑的因素可能有敌人的距离、敌我的血量情况、周围的小兵、敌人是否有队友支援等。

参见图6,图6是本申请实施例提供的中控服务器和拟人化AI通讯的协议框架图,相关技术为了弥补上述行为树的不足,设计专门控制拟人化AI的中控服务器(即上述的服务器),中控服务器与拟人化AI之间、以及中控服务器与第三方服务(即上述的预测服务)之间通过TCP协议进行通讯,通讯的协议命令字主要包含4个:1)INIT:初始化命令字,主要用于拟人化AI和中控服务器建立长连接;2)UPDATE:对局数据命令字,主要用来上报拟人化AI采集的对局数据(即上述的交互数据);3)QUIT:退出命令字,用于表示拟人化AI退出对局,通知中控服务器释放资源;4)HEARTBEAT:心跳命令字,表示拟人化AI仍存活,用来维持拟人化AI和中控服务器的长连接,其中,长连接表示游戏对局的AI对象从产生到消亡的整个过程中,始终与中控服务器保持通信连接。然而,这种方式需要维护中控服务器与拟人化AI之间、服务器与第三方服务之间的连接建立和心跳保活,设计比较复杂,同时占用较多机器资源,针对拟人化AI的控制效率低。

为此,本申请实施例提供一种虚拟场景中的行为控制方法,提供一种轻量服务器框架,能够提高针对非用户角色的控制效率,节约硬件处理资源。参见图7,图7是本申请实施例提供的轻量服务器的交互流程图,轻量服务器与拟人化AI之间通过无连接协议,如用户报文协议(UDP,User Data Protocol)进行通信,轻量服务器与第三方服务之间也通过无连接协议,如HTTP协议进行通信;在实际应用中,拟人化AI实时采集对局数据(即上述的交互数据)后,通过UDP协议将对局数据发送至轻量服务器,轻量服务器通过HTTP协议将交互数据发送至第三方服务(即上述的预测服务),并通过第三方服务对拟人化AI的交互行为进行预测,得到相应的行为预测结果(即上述的目标交互行为),并将预测结果返回至轻量服务器,轻量服务器通过UDP协议将预测结果返回至拟人化AI,拟人化AI基于预测结果执行相应的交互行为,实现实时调控拟人化AI行为目的;由于图7中采用无连接协议,如拟人化AI和轻量服务器之间的UDP协议,拟人化AI和轻量服务器直接通讯,不需要在首次通讯时建立连接,也不需要定期心跳维持连接;又如,轻量服务器与第三方服务之间的HTTP协议是短连接,即一个请求对应一个链接,一个链接只处理一个请求,请求处理好后就断开相应的链接,无需一直维持链接直至对局结束;这种轻量的服务器框架,大大降低了设计的复杂性,减少了硬件资源的占用,提高了硬件资源利用率。

在实际应用中,在启动轻量服务器时,需要对轻量服务器进行初始化,参见图8,图8是本申请实施例提供的轻量服务器的初始化流程示意图,图8示出的初始化流程包括:

步骤1、申请共享内存作为对局哈希池。对局哈希池包括的内容如表1所示。

表1

其中,表1中,第三方服务的地址即为上述目标预测服务的链接地址。对局标识ID、业务标识(BusinessID)和URL映射到对局哈希池的结点,用来实现轻量服务器和拟人化AI之间、轻量服务器与第三方服务之间的映射。

步骤2、初始化北极星组件,即调用北极星组件的初始化接口函数,其中,北极星组件是一个公共组件,用于解决远程调用的服务注册发现、动态路由、负载均衡和容错问题。

步骤3、从配置文件读取接收缓存大小,并动态分配接收缓存,可根据实际需求配置接收缓存大小,如可配置接收缓存大小为512kB。

步骤4、从配置文件读取发送缓存大小,并动态分配发送缓存,可根据实际需求配置发送缓存大小,如可配置发送缓存大小为512kB。

步骤5、调用系统函数epoll_create创建epoll。

步骤6、设置epoll的事件处理函数,主要包括READ(接收数据)、WRITE(发送数据)、ERROR(发生错误)。

步骤7、初始化socket,也就是调用系统函数socket创建套接字fd,调用系统函数bind将套接字和服务器的IP地址和指定的端口(如使用端口9231)绑定起来,调用系统函数listen函数让套接字进入被动侦听状态。

步骤8、将上步骤的侦听套接字listenfd注册到epoll中,从而使用epoll的多路复用功能处理拟人化AI的请求。

步骤9、动态申请线程池(curl),并初始化线程网络库(libcurl),可根据实际需求配置线程池的大小,如配置线程池的大小为2.3mB。

接下来对轻量服务器对接收到的拟人化AI发送的请求消息的处理流程进行说明,参见图9,图9是本申请实施例提供的轻量服务器处理消息的流程示意图,结合图9示出的步骤进行说明。

步骤1、轻量服务器定时调用系统函数epoll_wait来检测事件的产生。

步骤2、调用系统函数recvfrom接收拟人化AI发送的请求消息,并获取拟人化AI的套接字地址。

这里,拟人化AI基于第一无连接协议发送请求消息,其中,第一无连接协议用于约束请求消息的内容格式,第一无连接协议中包括源端口号(即拟人化AI的套接字地址)、目的端口号(即轻量服务器的套接字地址)、包长度(用于限定传输消息的长度)、校验和(用于校验数据是否出错)、以及交互数据对应的数据字段。

步骤3、对拟人化AI发送的请求消息进行解包,得到原始的请求包。

步骤4、从请求包中获取对局标识和业务标识。

步骤5、根据对局标识,从对局哈希池中查找对局结点。

步骤6:判断是否找到对局结点。若在对局哈希池中查找到对局结点,执行步骤8;若在对局哈希池中查找不到对局结点,执行步骤7。

步骤7、从对局哈希池申请新的对局结点,并初始化;

步骤8、设置对局结点的对局标识字段RoomID,并更新最近一次接收到拟人化AI消息的时间戳,即表1字段LastRecvTime为当前时间戳。

步骤9、根据业务标识,从业务处理器查找与业务标识对应的请求处理函数。

步骤10、请求处理函数判断当前业务是否使用北极星组件,若是,执行步骤11;否则,执行步骤12。

步骤11、调用北极星接口,获取访问第三方服务的IP地址和端口。在实际应用中,可直接配置第三方服务的IP地址和端口。

步骤12、从对局结点分配业务线程数据元素(即curl数据元素)。也即,对表1的字段CurlList进行初始化,如设置该数组的最大值为15,ListCount字段加1,初始化分配的业务线程数据元素,包括表1的字段BusinessID(即业务标识)、BusinessReq、ClientAddr(拟人化AI的套接字地址)、URL(第三方服务的链接地址,即IP地址和端口号)等。

步骤13、从线程(curl)池分配业务线程(curl)结点,并设置回调函数,用于接收到第三方服务的回包后继续处理该业务。

步骤14、判断业务线程结点是否分配成功。若分配失败,执行步骤15;若分配成功,执行步骤16。

步骤15、如果分配curl节点失败,则标识重试,即表1的字段NeedRetry,然后结束当前处理流程,服务器会定时对标识重试的业务再次处理,如图10所示。

步骤16、在业务线程数据元素中记录业务线程结点的结点标识。这里例如,在对局结点的业务线程数据元素中记录业务线程结点的结点标识(即表1的字段CurlReqID),实现业务线程数据元素和业务线程结点的绑定。

步骤17、根据拟人化AI的请求包,对业务线程结点进行封装,得到业务线程请求消息。例如,根据拟人化AI的请求包,填充业务线程结点,如根据对局标识、业务标识、签名计算、请求消息中的交互数据、第三方服务的URL、超时时间设置(如将超时时间设置为60秒,如60秒内不响应,则关闭线程结点)等,对业务线程结点进行封装,得到业务线程请求消息(即curl请求)。

步骤18、发送业务线程请求消息到第三方服务。例如,根据业务线程请求消息中携带的第三方服务的URL,将业务线程请求消息(curl请求)发送至第三方服务。

步骤19、定期接收第三方服务的回包,执行回调函数。轻量服务器与第三方服务之间通过HTTP连接,轻量服务器定期接收到第三方服务通过HTTP返回的数据包,其中,数据包中包括了第三方服务器基于交互数据预测得到的目标交互行为。

步骤20、从业务线程结点(curl节点)获取对局标识和业务标识。

步骤21、根据对局标识,从对局哈希池查找对局结点。

步骤22、判断是否在对局哈希池中查找到对局结点,若查找得到的,执行步骤23,否则,执行步骤30。

步骤23、判断http回包的错误码是否CURLE_OK。这里,当在对局哈希池中查找到对局结点时,判断第三方服务是否已成功处理业务线程请求消息,如判断错误码是否为CURLE_OK,当错误码是CURLE_OK,则表征第三方服务已成功处理业务线程请求消息,执行步骤24;否则,执行步骤29。

步骤24、根据业务标识,从业务处理器查找对应的响应处理函数。

步骤25、通过响应处理函数遍历对局哈希池,根据业务线程结点的结点标识,查找对应的业务线程数据元素。

步骤26、判断是否找到。当查找到对应的业务线程数据元素时,执行步骤27;当查找不到对应的业务线程数据元素时,执行步骤29。

步骤27、生成拟人化AI的响应消息。例如,根据查找到的业务线程数据元素(如对局标识、业务标识)及第三方服务返回的预测数据包进行组装,得到拟人化AI的响应包。

步骤28、调用目标组件接口进行打包,生成对应请求消息的响应消息。

步骤29、发送响应消息至拟人化AI。如从业务线程元素中获取拟人化AI的套接字地址,并将响应信息发送至拟人化AI的套接字地址。

步骤30、释放业务线程结点绑定的业务线程数据元素。这里,当步骤23中确定第三方服务未成功处理好业务线程请求消息,或者,步骤26中确定未查找到对应的业务线程数据元素时,则释放业务线程数据元素,即释放表1的字段ListData数组的元素。

步骤31、释放业务线程结点。这里,当步骤22中确定基于对局标识从对局哈希池中未查找到对局结点,释放业务线程结点。

步骤32、当对局结点对应的所有请求消息均被执行完毕时,释放对局结点。这里,如果对局结点所有的curl请求都完成了,也就是表1的字段ListCount等于0,那么释放对局结点。

为了对局哈希池和线程池的使用效率,本申请实施例会定时检查对局结点处理请求消息(即curl请求)的进度,释放超时资源,参见图10,图10是本申请实施例提供的资源释放流程示意图,将结合图10示出的步骤进行说明。

步骤1、服务器读取配置文件,获取对局哈希池的大小。

步骤2、服务器读取配置文件,获取每次扫描对局结点的比例。

步骤3、计算每次扫描对局哈希池的结点数量。如根据步骤1和步骤2读取的两个数值,将对局哈希池的大小与每次扫描对局结点的比例之间的乘积作为每次扫描对局哈希池的结点数量。

步骤4、从上次扫描结束的对局哈希池的结点索引开始,循环处理以下步骤。

步骤5、判断对局结点的结点索引是否大于等于对局哈希池最大结点数量。如果结点索引大于等于对局哈希池最大结点数量,则执行步骤6;否则,执行步骤7。

步骤6、结点索引重置为0,开始新一轮扫描。

步骤7、从对局哈希池取出对应索引的对局结点。

步骤8、判断对局结点是否被使用。如果该对局结点被使用时,则执行步骤9;如果该对局结点尚未被使用,则结点索引加1,继续处理下一个对局结点,即执行步骤4。

步骤9、判断对局结点所有的curl请求是否都完成。例如,判读表1的字段ListCount是否等于0,如果是,则执行步骤10;否则,执行步骤11。

步骤10、释放对局结点。

步骤11、判断对局结点最后接收拟人化AI消息的时间是否大于配置的超时时间。其中,对局结点最后接收拟人化AI消息的时间是当前时间戳和表1的字段LastRecvTime的差值,配置的超时时间可根据实际需求而定,如可配置超时时间为60秒。当对局结点最后接收拟人化AI消息的时间大于配置的超时时间,这执行步骤10;当对局结点最后接收拟人化AI消息的时间不大于配置的超时时间,则继续执行步骤12。

步骤12、遍历对局结点所有的业务线程数据元素(即表1字段ListData),如果元素带有重试标识(即表1字段NeedRetry为1),则尝试重新从线程池分配业务线程结点(即curl结点),然后按照图9的步骤继续执行。

步骤13、完成对局结点所有的业务线程数据元素的重试后,结点扫描数加1。

步骤14、判断结点扫描数是否大于每次扫描的对局结点数量。如果结点扫描数大于每次扫描的对局结点数量,执行步骤15;否则,结点索引加1,继续处理下一个对局结点,即继续执行步骤4。

步骤15、记录完成扫描的对局结点索引。其中,记录的完成扫描的对局结点索引作为下次扫描的起点,结束本次扫描处理。

通过上述方式,本申请实施例提出一种轻量的、实时调整拟人化AI表现的服务器框架,能够采集游戏中对局、玩家等相关的交互数据,并上报给第三方服务进行数据挖掘、建模分析,然后利用第三方服务的预测结果,实时调整拟人化AI的表现,大大增强了拟人化AI的智能化和随机应变能力,提升玩家体验;此外,本申请实施例提供的服务器框架,通过无连接协议和拟人化AI通讯,避免了连接建立和心跳保活,降低了设计的复杂性,同时减少了资源的占用;而且,本申请实施例提供的服务器框架会定时检查对局结点处理curl请求的进度,释放超时资源,从而提高资源的使用效率。

至此已经结合本申请实施例提供的电子设备的示例性应用和实施,说明本申请实施例提供的虚拟场景中的行为控制方法,下面继续说明本申请实施例提供的虚拟场景中的行为控制装置455中各个模块配合实现虚拟场景中的行为控制方案。

接收模块4551,用于接收到虚拟场景中的非用户角色基于第一无连接协议发送的请求消息,所述请求消息携带所述非用户角色与真实玩家角色在交互对局中的交互数据;预测模块4552,用于基于所述交互数据,对所述非用户角色在所述交互对局中的交互行为进行预测,得到所述非用户角色的目标交互行为;生成模块4553,用于基于所述目标交互行为,生成对应所述请求消息的响应消息,其中,所述响应消息携带用于指示所述非用户角色执行所述目标交互行为的行为控制指令;返回模块4554,用于基于第二无连接协议返回所述响应消息至所述非用户角色,以使所述非用户角色基于所述行为控制指令执行所述目标交互行为。

在一些实施例中,所述接收到虚拟场景中的非用户角色基于第一无连接协议发送的请求消息之前,所述装置还包括:创建模块,用于创建用于与所述非用户角色进行通讯的套接字,并将所述套接字与服务器的互联网协议网址和端口号进行绑定;所述接收模块,还用于通过绑定后的所述套接字,接收到虚拟场景中的非用户角色基于第一无连接协议发送的请求消息;所述接收到虚拟场景中的非用户角色基于无连接协议发送的请求消息之后,所述装置还包括:关闭模块,用于关闭所述套接字,以禁止通过所述套接字接收除所述请求消息之外的其他请求信息。

在一些实施例中,所述请求消息携带业务标识,所述装置还包括:确定模块,用于基于所述业务标识,确定所述业务标识对应的目标预测服务;所述预测模块,还用于通过所述目标预测服务中的行为预测模型,基于所述交互数据,对所述非用户角色在所述交互对局中的交互行为进行预测,得到所述非用户角色的目标交互行为;其中,所述行为预测模型是基于交互数据样本、所述交互数据样本标注的交互行为训练得到的。

在一些实施例中,所述基于所述业务标识,确定所述业务标识对应的目标预测服务之前,所述装置还包括:构建模块,用于构建业务标识与预测服务之间的映射关系,所述业务标识与所述预测服务呈一一对应关系;所述确定模块,还用于基于所述映射关系及所述业务标识,从多个预测服务中筛选出与所述业务标识相适配的目标预测服务。

在一些实施例中,所述通过所述目标预测服务,基于所述交互数据,对所述非用户角色在所述交互对局中的交互行为进行预测之前,所述装置还包括:消息发送模块,用于对所述请求消息进行解析,得到所述请求消息携带的所述交互数据、所述交互对局的对局标识和业务标识;根据所述对局标识,在对局哈希池中获取所述对局标识对应的对局结点,并根据所述业务标识,查找所述业务标识对应的请求处理函数;通过所述请求处理函数,获取所述目标预测服务的链接地址,并对所述对局结点进行线程数据分配和线程结点分配,得到所述对局结点对应的业务线程数据元素和业务线程结点;基于所述对局标识和所述业务标识,初始化所述业务线程数据元素,并基于所述业务线程结点的结点标识,绑定所述业务线程数据元素与所述业务线程结点;根据所述交互数据、所述目标预测服务的链接地址及初始化后的所述业务线程数据元素,对所述业务线程结点进行封装,得到业务线程请求消息,并将所述业务请求消息发送至所述目标预测服务,以使所述目标预测服务基于所述业务请求消息,对所述非用户角色在所述交互对局中的交互行为进行预测。

在一些实施例中,所述生成模块,还用于当接收到所述目标预测服务返回的针对所述业务请求消息的预测数据包时,通过所述对局结点对应的回调函数,从所述业务线程结点获取所述对局标识和所述业务标识;当基于所述对局标识从所述对局哈希池中查找到所述对局结点、以及基于所述预测数据包确定所述目标预测服务成功处理所述业务请求消息时,根据所述业务标识查找所述业务标识对应的响应处理函数;当通过所述响应处理函数遍历所述对局哈希池查找到对应的业务线程数据元素时,根据查找到的所述业务线程数据元素及所述预测数据包进行组装,生成对应所述请求消息的响应消息。

在一些实施例中,所述装置还包括:释放模块,用于当满足业务释放条件时,释放所述业务线程结点绑定的业务线程数据元素、以及所述业务线程结点;其中,所述业务释放条件包括以下至少之一:基于所述对局标识从所述对局哈希池中未查找到所述对局结点、基于所述预测数据包确定所述目标预测服务未成功处理所述业务请求消息、调用所述响应处理函数未查找到对应的业务线程数据元素;当所述对局结点对应的所有请求消息均被执行完毕时,释放所述对局结点。

在一些实施例中,所所述返回模块,还用于从所述业务线程数据元素中获取所述非用户角色对应的套接字地址;基于第二无连接协议,返回所述响应消息至所述非用户角色对应的套接字地址。

在一些实施例中,所述装置还包括:标记模块,用于当通过所述请求处理函数对所述对局结点进行线程结点分配失败时,对所述对局结点标记重试标识。

在一些实施例中,所述装置还包括:重试模块,用于基于所述对局哈希池的大小以及每次扫描对局结点的比例,确定每次扫描所述对局哈希池中对局结点的数量;从上次扫描结束时所述对局哈希池中的结点索引开始执行以下处理:当所述结点索引小于所述对局哈希池中的最大结点数量时,获取所述结点索引对应的对局结点;当所述对局结点已被处理、且对应的部分请求消息未被执行完毕时,获取所述对局结点最后接收所述非用户角色发送的请求消息的持续时长;当所述持续时长不超过目标时长、且所述对局结点携带有重试标识时,对所述对局结点重新分配相应的业务线程结点,并增加结点扫描数;当增加后的结点扫描数大于每次扫描所述对局哈希池中对局结点的数量时,结束本次扫描,并记录所述对局结点的结点索引作为下次扫描的起点。

在一些实施例中,所述重试模块,还用于当所述结点索引大于或等于所述对局哈希池中的最大结点数量时,将所述结点索引重置为零,并开始下一次扫描;当所述对局结点对应的所有请求消息均被执行完毕,或当所述持续时长超过目标时长时,释放所述对局结点,并增加结点扫描数;当所述对局结点未被处理、或当增加后的结点扫描数不大于每次扫描所述对局哈希池中对局结点的数量时,增加所述对局结点对应的结点索引。

本申请实施例提供了一种计算机程序产品,该计算机程序产品包括计算机程序或计算机可执行指令,该计算机程序或计算机可执行指令存储在计算机可读存储介质中。电子设备的处理器从计算机可读存储介质读取该计算机可执行指令,处理器执行该计算机可执行指令,使得该电子设备执行本申请实施例上述的虚拟场景中的行为控制方法。

本申请实施例提供一种存储有计算机可执行指令的计算机可读存储介质,其中存储有计算机可执行指令或者计算机程序,当计算机可执行指令或者计算机程序被处理器执行时,将引起处理器执行本申请实施例提供的虚拟场景中的行为控制方法,例如,如图3示出的虚拟场景中的行为控制方法。

在一些实施例中,计算机可读存储介质可以是FRAM、ROM、PROM、EPROM、EEPROM、闪存、磁表面存储器、光盘、或CD-ROM等存储器;也可以是包括上述存储器之一或任意组合的各种设备。

在一些实施例中,计算机可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。

作为示例,计算机可执行指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(HTML,HyperText Markup Language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。

作为示例,计算机可执行指令可被部署为在一个电子设备上执行,或者在位于一个地点的多个电子设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个电子设备上执行。

以上所述,仅为本申请的实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本申请的保护范围之内。

技术分类

06120116332263