CN113559499B - 虚拟场景的服务处理方法、装置、电子设备及存储介质 - Google Patents
虚拟场景的服务处理方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN113559499B CN113559499B CN202111120037.4A CN202111120037A CN113559499B CN 113559499 B CN113559499 B CN 113559499B CN 202111120037 A CN202111120037 A CN 202111120037A CN 113559499 B CN113559499 B CN 113559499B
- Authority
- CN
- China
- Prior art keywords
- service
- scene
- target object
- scenario
- 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
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/30—Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
- A63F13/35—Details of game servers
- A63F13/358—Adapting the game course according to the network or server load, e.g. for reducing latency due to different connection speeds between clients
-
- 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/53—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 details of basic data processing
- A63F2300/534—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 details of basic data processing for network load management, e.g. bandwidth optimization, latency reduction
Abstract
本申请提供了一种虚拟场景的服务处理方法、装置、电子设备、计算机可读存储介质及计算机程序产品;方法包括:根据目标对象的标识查询客户端,得到目标对象曾经驻留的第一场景服务的第一服务地址,第一场景服务用于控制目标对象在第一虚拟场景中的状态;根据第一服务地址向第一场景服务发送至少一个服务请求;响应于第一场景服务返回的至少一个服务请求,根据标识查询数据库,得到目标对象从第一场景服务迁移后所驻留的第二场景服务的第二服务地址;根据第二服务地址向第二场景服务发送至少一个服务请求,第二场景服务用于控制目标对象在第二虚拟场景中的状态。通过本申请,能够保证对象在多个场景服务之间发生迁移的稳定性和效率。
Description
技术领域
本申请涉及互联网技术领域,尤其涉及一种虚拟场景的服务处理方法、装置、电子设备、计算机可读存储介质及计算机程序产品。
背景技术
基于图形处理硬件的虚拟场景的人机交互技术,能够根据实际应用需求实现受控于用户或人工智能的虚拟对象之间的多样化的交互,具有广泛的实用价值。在游戏的虚拟场景中,虚拟对象(例如野怪、世界Boss(游戏中首领级别的守关怪物,通常在各类游戏关底压轴部分或迷宫深处出现)等)可能在不同的场景服务之间发生迁移,例如在一个典型的大型多人在线(MMO,Massive Multiplayer Online)游戏中,用户在控制野怪移动时,如果跨越了不同的虚拟场景,则野怪就会从一个场景服务迁移到另一个场景服务。
如何保证虚拟对象在多个场景服务之间发生迁移的稳定性和效率,相关技术尚无有效的解决方案。
发明内容
本申请实施例提供一种虚拟场景的服务处理方法、装置、电子设备、计算机可读存储介质及计算机程序产品,能够保证对象在多个场景服务之间发生迁移的稳定性和效率。
本申请实施例的技术方案是这样实现的:
本申请实施例提供一种虚拟场景的服务处理方法,包括:
根据目标对象的标识查询客户端,得到所述目标对象曾经驻留的第一场景服务的第一服务地址,其中,所述第一场景服务用于控制所述目标对象在第一虚拟场景中的状态;
根据所述第一服务地址向所述第一场景服务发送至少一个服务请求;
响应于所述第一场景服务返回的所述至少一个服务请求,根据所述标识查询数据库,得到第二场景服务的第二服务地址,其中,所述第二场景服务是所述目标对象从所述第一场景服务迁移后所驻留的场景服务;
根据所述第二服务地址向所述第二场景服务发送所述至少一个服务请求,其中,所述第二场景服务用于控制所述目标对象在第二虚拟场景中的状态。
上述方案中,第二响应消息还用于供所述第一场景服务执行以下处理:拒绝响应在所述第二响应消息之前接收到的针对所述目标对象的所述至少一个服务请求,并向所述客户端返回第三响应消息,其中,所述第三响应消息用于通知所述客户端已经拒绝响应针对所述目标对象的所述至少一个服务请求。
本申请实施例提供一种虚拟场景的服务处理装置,包括:
查询模块,用于根据目标对象的标识查询客户端,得到所述目标对象曾经驻留的第一场景服务的第一服务地址,其中,所述第一场景服务用于控制所述目标对象在第一虚拟场景中的状态;
发送模块,用于根据所述第一服务地址向所述第一场景服务发送至少一个服务请求;
所述查询模块,还用于响应于所述第一场景服务返回的所述至少一个服务请求,根据所述标识查询数据库,得到第二场景服务的第二服务地址,其中,所述第二场景服务是所述目标对象从所述第一场景服务迁移后所驻留的场景服务;
所述发送模块,还用于根据所述第二服务地址向所述第二场景服务发送所述至少一个服务请求,其中,所述第二场景服务用于控制所述目标对象在第二虚拟场景中的状态。
上述方案中,当根据目标对象的标识未在所述客户端中查询到所述目标对象曾经驻留的第一场景服务的第一服务地址时,所述查询模块,还用于根据所述目标对象的标识查询数据库中存储的多个对象的当前的路由信息,得到所述目标对象当前驻留的第二场景服务的第二服务地址,其中,每个所述对象的当前的路由信息包括每个所述对象的标识、以及每个所述对象当前驻留的场景服务的服务地址;所述发送模块,还用于根据所述第二服务地址向所述第二场景服务发送至少一个服务请求。
上述方案中,所述装置还包括存储模块,用于在所述客户端中存储所述目标对象的路由信息,其中,所述目标对象的路由信息用于响应基于所述标识对所述客户端的下一次查询,且所述目标对象的路由信息包括:所述目标对象的标识、以及所述第二场景服务的第二服务地址。
上述方案中,所述查询模块,还用于根据所述目标对象的标识查询所述客户端中存储的多个对象的历史的路由信息,得到所述目标对象曾经驻留的第一场景服务的第一服务地址;其中,每个所述对象的历史的路由信息包括每个所述对象的标识、以及每个所述对象曾经驻留的场景服务的服务地址。
上述方案中,所述查询模块,还用于根据所述目标对象的标识查询数据库中存储的多个对象当前的路由信息,得到所述目标对象从所述第一场景服务迁移后当前所驻留的第二场景服务的第二服务地址,其中,每个所述对象当前的路由信息包括每个所述对象的标识、以及每个所述对象当前驻留的场景服务的服务地址。
上述方案中,所述数据库的更新方式包括:当所述目标对象从所述第一场景服务迁移到所述第二场景服务时,所述第二场景服务注册所述目标对象的当前的路由信息,其中,所述目标对象的当前的路由信息包括:所述目标对象的标识、以及所述第二场景服务的第二服务地址,并通知所述数据库更新所述数据库中已经存储的所述目标对象的当前的路由信息。
上述方案中,所述第一场景服务确定将返回所述至少一个服务请求的方式包括以下之一:当所述目标对象从所述第一场景服务迁移到所述第二场景服务时,所述第一场景服务接收到表征所述第二场景服务中已经注册所述目标对象的第二路由信息的更新通知,并根据所述更新通知删除所述第一场景服务中注册的所述目标对象的第一路由信息后,确定将返回所述至少一个服务请求;当所述第一场景服务确定所述目标对象从所述第一场景服务迁移到所述第二场景服务,且在所述第一场景服务中未查询到注册的所述目标对象的第一路由信息时,确定将返回所述至少一个服务请求。
上述方案中,当所述至少一个服务请求是先后发送的多个服务请求时,所述存储模块,还用于当所述多个服务请求中的任意一个服务请求携带拒绝标识被返回时,将所述任意一个服务请求存入所述客户端的第一队列中,其中,所述多个服务请求在所述第一队列中是按照发送的先后顺序排列的;所述发送模块,还用于响应于所述第一场景服务返回的第一响应消息,根据所述第二服务地址向所述第二场景服务发送所述第一队列中存储的所述多个服务请求,其中,所述第一响应消息用于通知所述客户端已经将所述多个服务请求全部返回。
上述方案中,所述装置还包括获取模块,用于获取针对所述目标对象的至少一个新服务请求;所述存储模块,还用于将所述至少一个新服务请求存储至所述客户端的第二队列中;所述发送模块,还用于当所述第一队列中存储的所述多个服务请求发送完毕时,根据所述第二服务地址向所述第二场景服务发送所述第二队列中存储的所述至少一个新服务请求。
上述方案中,所述发送模块,还用于响应于所述第一场景服务返回的所述至少一个服务请求,向所述第一场景服务发送第二响应消息,其中,所述第二响应消息用于通知所述第一场景服务已经确定所述目标对象迁移出所述第一场景服务,且后续不会再向所述第一场景服务发送针对所述目标对象的服务请求。
上述方案中,所述第二响应消息还用于供所述第一场景服务执行以下处理:拒绝响应在所述第二响应消息之前接收到的针对所述目标对象的所述至少一个服务请求,并向所述客户端返回第三响应消息,其中,所述第三响应消息用于通知所述客户端已经拒绝响应接收到的针对所述目标对象的所述至少一个服务请求。
上述方案中,所述客户端中设置有动态链接库,所述动态链接库包括用于执行所述查询的库文件;所述装置还包括调用模块,用于调用所述库文件,以转入执行本申请实施例提供的虚拟场景的服务处理方法。
本申请实施例提供一种电子设备,包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现本申请实施例提供的虚拟场景的服务处理方法。
本申请实施例提供一种计算机可读存储介质,存储有可执行指令,用于引起处理器执行时,实现本申请实施例提供的虚拟场景的服务处理方法。
本申请实施例提供一种计算机程序产品,包括计算机程序或指令,用于引起处理器执行时,实现本申请实施例提供的虚拟场景的服务处理方法。
本申请实施例具有以下有益效果:
通过在客户端本地查询的方式查询目标对象驻留的服务地址,能够使目标对象尽快驻留到新的场景服务,保证了目标对象驻留的场景服务发生迁移时的处理效率;通过与在数据库中查询场景服务的服务地址的方式结合,即使在客户端没有查询到服务地址时,也能够根据在数据库查询到的服务地址,准确完成场景服务的迁移。相较于将服务地址的查询功能单一部署的方式,具有更好的可靠性。
附图说明
图1是相关技术提供的虚拟场景的服务处理方法的流程示意图;
图2是本申请实施例提供的虚拟场景的服务处理系统100的架构示意图;
图3是本申请实施例提供的终端设备400的结构示意图;
图4是本申请实施例提供的虚拟场景的服务处理方法的流程示意图;
图5是本申请实施例提供的虚拟场景的服务处理方法的流程示意图;
图6是本申请实施例提供的虚拟场景的服务处理方法的流程示意图;
图7是本申请实施例提供的虚拟场景的服务处理系统的原理示意图;
图8是本申请实施例提供的虚拟场景的服务处理方法的流程示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
在以下的描述中,所涉及的术语“第一\第二”仅仅是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
对本申请实施例进行进一步详细说明之前,对本申请实施例中涉及的名词和术语进行说明,本申请实施例中涉及的名词和术语适用于如下的解释。
1)客户端,终端设备中呈现虚拟场景的应用程序,例如游戏客户端、视频播放客户端等。
2)响应于,用于表示所执行的操作所依赖的条件或者状态,当满足所依赖的条件或状态时,所执行的一个或多个操作可以是实时的,也可以是具有设定的延迟;在没有特别说明的情况下,所执行的多个操作不存在执行先后顺序的限制。
3)虚拟场景,是应用程序在终端设备上运行时显示(或提供)的虚拟场景。该虚拟场景可以是对真实世界的仿真环境,也可以是半仿真半虚构的虚拟环境,还可以是纯虚构的虚拟环境。虚拟场景可以是二维虚拟场景、2.5维虚拟场景或者三维虚拟场景中的任意一种,本申请实施例对虚拟场景的维度不加以限定。例如,虚拟场景可以包括天空、陆地、海洋等,该陆地可以包括沙漠、城市等环境元素,用户可以控制虚拟对象在该虚拟场景中进行移动。
4)对象,又称虚拟对象或应用层对象,是指虚拟场景中可以进行交互的各种人和物的形象,或在虚拟场景中的可活动对象。该可活动对象可以是虚拟人物、虚拟动物、动漫人物、地图资源(例如地图中的非玩家角色(NPC,Non-Player Character))等。该虚拟对象可以是该虚拟场景中的一个虚拟的用于代表用户的虚拟形象。虚拟场景中可以包括多个虚拟对象,每个虚拟对象在虚拟场景中具有自身的形状和体积,占据虚拟场景中的一部分空间。举例来说,虚拟对象可以是游戏业务中的场景对象,例如公共地图资源、野怪、世界Boss等。
5)场景服务,即虚拟场景服务,虚拟场景的服务器上运行的服务进程,用于控制虚拟对象在虚拟场景中的状态,其中,每个场景服务用于控制虚拟对象在对应的一个虚拟场景中的状态。例如,在虚拟场景的服务器上运行有场景服务A和场景服务B,其中,场景服务A用于控制虚拟对象在虚拟场景1中的状态,场景服务B用于控制虚拟对象在虚拟场景2中的状态。
6)动态链接库,又称动态名库,封装了各种能够被复用的代码(例如函数),供开发者进行代码调用,从而开发者无需重复开发。动态链接库是各种操作系统例如Linux系统、Android系统中常见的文件,是一种可执行与可链接格式(ELF,Executable and LinkableFormat)文件。处理器在需要运行程序时,才会将这些需要的代码拷贝到对应的内存中。
7)路由信息,原指路由器从一个接口上收到数据包,将数据包转发到另一个接口所需的信息,例如包括数据包的目的地址,本申请实施例中的路由信息包括对象的标识、以及对象所驻留的场景服务的服务地址,用于供客户端在接收到针对某个对象的服务请求后,根据服务地址向对应的场景服务发送针对该对象的服务请求。
以虚拟场景为游戏为例,在游戏服务开发场景中,游戏中的虚拟对象(例如野怪、世界Boss等)并非与某一个具体的场景服务绑定,可能发生迁移。例如在一个典型的MMO场景中,用户可以控制野怪从一个场景服务移动到另一个场景服务中。也就是说,由于虚拟对象可能在多个场景服务之间发生迁移,当需要与某一个虚拟对象进行通信时,首先需要通过虚拟对象的标识(ID,Identity Document)查找到其所驻留的场景服务,然后与该场景服务进行通信。
在相关技术提供的游戏开发环节中,一般需要部署单独的ID映射服务,来记录当前全局的虚拟对象、以及每个虚拟对象所驻留的场景服务的服务地址之间的映射关系。如图1所示,客户端每次向虚拟对象发送请求时都需要到ID映射服务中查询一次虚拟对象当前所驻留的场景服务的服务地址,再根据ID映射服务返回的服务地址去请求实际的目标场景服务,例如当客户端需要减少野怪的血量时,首先向ID映射服务发送携带野怪的ID的查询请求,接着ID映射服务根据客户端发送的野怪的ID(例如10001)查询到对应的服务地址(例如ServiceA),随后客户端根据ID映射服务返回的服务地址ServiceA,将减少野怪血量的请求发送至野怪当前所驻留的场景服务A。
然而,申请人发现相关技术提供的单独部署ID映射服务的方案存在以下主要问题:
1)ID映射服务需要服务于游戏中全局的虚拟对象,因此必须单点部署来保证数据的强一致性,但这同时也带来了单点故障问题,且无法对服务进行水平扩展。
2)ID映射服务没有消息返回的机制,对象在发生迁移时也不会将迁移信息及时通知到客户端,从而客户端无法信任本地缓存的路由信息,需要每次都去ID映射服务查询最新的路由信息,从而带来了不必要的网络开销和服务延迟。
此外,申请人还发现相关技术提供的单独部署ID映射服务的方案还存在以下问题:
3)与游戏中的虚拟对象进行通信是大量的游戏业务都需要解决的通用问题,应该有一个统一的解决方案,以避免多个业务团队进行重复工作,这会大大降低了处理效率。
4)ID映射服务是一个独立的服务进程,需要额外的运营和维护成本。
鉴于此,本申请实施例提供一种虚拟场景的服务处理方法、装置、电子设备、计算机可读存储介质及计算机程序产品,能够保证虚拟对象在多个场景服务之间发生迁移的稳定性和效率。下面说明本申请实施例提供的电子设备的示例性应用,本申请实施例提供的电子设备可以实施为笔记本电脑,平板电脑,台式计算机,机顶盒,移动设备(例如,移动电话,便携式音乐播放器,个人数字助理,专用消息设备,便携式游戏设备)等各种类型的终端设备,也可以由服务器和终端设备协同实施。下面,将说明电子设备实施为终端设备时的示例性应用。
参见图2,图2是本申请实施例提供的虚拟场景的服务处理系统100的架构示意图,为实现支撑一个高效且安全地处理针对目标对象的服务请求的应用,终端设备400通过网络300连接服务器200和数据库500,网络300可以是广域网或者局域网,又或者是二者的组合。
服务器200是终端设备400上运行的客户端410的后台服务器,在服务器200上运行有多个场景服务,其中,每个场景服务用于控制虚拟场景中特定的对象(例如对象A)在对应的一个虚拟场景中的状态(例如减少对象A的生命值、或者提升对象A的等级等),例如假设在服务器200上运行有场景服务A和场景服务B,其中,场景服务A用于控制对象A在虚拟场景1中的状态,而场景服务B用于控制对象A在虚拟场景2中的状态。
终端设备400上运行有客户端410(例如游戏客户端),当客户端410需要与对象A进行通信(例如需要减少对象A的生命值)时,首先根据对象A的标识查询客户端410(例如查询客户端410的缓存中记录的对象A的历史路由信息),得到对象A曾经驻留的第一场景服务(例如场景服务A)的服务地址,接着客户端410根据场景服务A的服务地址向服务器200中运行的场景服务A发送针对对象A的服务请求。当场景服务A确定对象A已经迁移出场景服务A时,例如对象A从场景服务A迁移到服务器200上运行的第二场景服务(例如场景服务B),则将接收到的针对对象A的服务请求返回给客户端410,随后客户端410根据对象A的标识查询数据库500(在数据库500中存储有多个对象的当前的路由信息),得到对象A从场景服务A迁移后所驻留的场景服务(例如场景服务B),最后客户端410根据数据库500返回的场景服务B的服务地址向服务器200中运行的场景服务B发送服务请求,以使场景服务B针对服务请求进行处理(例如减少虚拟场景2中显示的对象A的生命值),如此,一方面能够在对象A发生迁移时及时通知客户端410进行重新发送针对对象A的服务请求;另一方面基于数据库500的一致性支持和扩展能力解决了单点故障问题,从而实现能够高效且安全地处理针对目标对象的服务请求。
需要说明的是,在实际应用中,不同的场景服务可以运行在同一个服务器上,也可以运行在不同的服务器上,如图2所示,当场景服务A和场景服务B运行在同一个服务器200上时,可以使用网际互连协议(IP,Internet Protocol)地址和不同端口的方式区分不同的场景服务,即可以通过同一个IP地址和不同的端口号来区分运行在同一个服务器上的不同的场景服务;而对于不同的场景服务运行在不同的服务器上的情况,则可以使用不同IP地址和特定端口的方式进行区分,即可以通过不同的IP地址和特定的端口号的方式来区分运行在不同服务器上的不同场景服务。
在一些实施例中,本申请实施例还可以借助于云技术(Cloud Technology)实现,云技术是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。
云技术是基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、以及应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络系统的后台服务需要大量的计算、存储资源。
示例的,图2中示出的服务器200可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(CDN,ContentDelivery Network)、以及大数据和人工智能平台等基础云计算服务的云服务器。终端设备400可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端设备400以及服务器200可以通过有线或无线通信方式进行直接或间接地连接,本申请实施例中不做限制。
在另一些实施例中,本申请实施例还可以结合区块链技术实现,例如图2中示出的数据库500可以运行在区块链网络中,终端设备400可以通过发起交易请求的方式查询在区块链网络中运行的数据库500,从而保证查询结果的可靠性。
在一些实施例中,终端设备400还可以通过运行计算机程序来实现本申请实施例提供的虚拟场景的服务处理方法,例如,计算机程序可以是操作系统中的原生程序或软件模块;可以是本地(Native)应用程序(APP,APPlication),即需要在操作系统中安装才能运行的程序,例如游戏APP(即上述的客户端410);也可以是小程序,即只需要下载到浏览器环境中就可以运行的程序;还可以是能够嵌入至任意APP中的游戏小程序。总而言之,上述计算机程序可以是任意形式的应用程序、模块或插件。
下面对图2中示出的终端设备400的结构进行说明。参见图3,图3是本申请实施例提供的终端设备400的结构示意图,图3所示的终端设备400包括:至少一个处理器420、存储器460、至少一个网络接口430和用户接口440。终端设备400中的各个组件通过总线系统450耦合在一起。可理解,总线系统450用于实现这些组件之间的连接通信。总线系统450除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图3中将各种总线都标为总线系统450。
处理器420可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
用户接口440包括使得能够呈现媒体内容的一个或多个输出装置441,包括一个或多个扬声器和/或一个或多个视觉显示屏。用户接口440还包括一个或多个输入装置442,包括有助于用户输入的用户接口部件,比如键盘、鼠标、麦克风、触屏显示屏、摄像头、其他输入按钮和控件。
存储器460可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器460可选地包括在物理位置上远离处理器420的一个或多个存储设备。
存储器460包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(ROM,Read Only Memory),易失性存储器可以是随机存取存储器(RAM,Random Access Memory)。本申请实施例描述的存储器460旨在包括任意适合类型的存储器。
在一些实施例中,存储器460能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
操作系统461,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
网络通信模块462,用于经由一个或多个(有线或无线)网络接口430到达其他计算设备,示例性的网络接口430包括:蓝牙、无线相容性认证(WiFi)、和通用串行总线(USB,Universal Serial Bus)等;
呈现模块463,用于经由一个或多个与用户接口440相关联的输出装置441(例如,显示屏、扬声器等)使得能够呈现信息(例如,用于操作外围设备和显示内容和信息的用户接口);
输入处理模块464,用于对一个或多个来自一个或多个输入装置442之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。
在一些实施例中,本申请实施例提供的虚拟场景的服务处理装置可以采用软件方式实现,图3示出了存储在存储器460中的虚拟场景的服务处理装置465,其可以是程序和插件等形式的软件,包括以下软件模块:查询模块4651、发送模块4652、存储模块4653、获取模块4654和调用模块4655,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。需要指出的是,在图3中为了方便表达,一次性示出了上述所有模块,但是不应视为在虚拟场景的服务处理装置465排除了可以只包括查询模块4651和发送模块4652的实施,将在下文中说明各个模块的功能。
在另一些实施例中,本申请实施例提供的虚拟场景的服务处理装置可以采用硬件方式实现,作为示例,本申请实施例提供的虚拟场景的服务处理装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本申请实施例提供的虚拟场景的服务处理方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(ASIC,Application Specific Integrated Circuit)、数字信号处理(DSP,Digital SignalProcessing)、可编程逻辑器件(PLD,Programmable Logic Device)、复杂可编程逻辑器件(CPLD,Complex Programmable Logic Device)、现场可编程门阵列(FPGA,Field-Programmable Gate Array)或其他电子元件。
下面从客户端、第一场景服务、第二场景服务和数据库之间进行交互的角度,对本申请实施例提供的虚拟场景的服务处理方法进行具体说明。
示例的,参见图4,图4是本申请实施例提供的虚拟场景的服务处理方法的流程示意图,将结合图4示出的步骤进行说明。
在步骤S101中,客户端根据目标对象的标识查询客户端,得到目标对象曾经驻留的第一场景服务的第一服务地址。
这里,第一场景服务用于控制目标对象在第一虚拟场景中的状态(例如减少目标对象在第一虚拟场景中的生命值、或者提升目标对象在第一虚拟场景中的等级等)。
在一些实施例中,在客户端(例如客户端的缓存)中预先存储有多个对象的历史的路由信息,则客户端可以通过以下方式得到目标对象曾经驻留的第一场景服务的第一服务地址:根据目标对象的标识查询客户端的缓存中存储的多个对象的历史的路由信息,得到目标对象曾经驻留的第一场景服务的第一服务地址,其中,每个对象的历史的路由信息包括每个对象的标识、以及每个对象曾经驻留的场景服务的服务地址。
示例的,以目标对象为对象A为例,客户端可以根据对象A的标识(例如对象A的ID)查询缓存中存储的多个对象(多个对象中包括对象A)的历史的路由信息,得到对象A的历史的路由信息,其中,对象A的历史的路由信息包括对象A在服务器中曾经驻留的某个场景服务的服务地址(例如场景服务A的服务地址)。
需要说明的是,在客户端中存储的每个对象曾经驻留的场景服务的服务地址可能与该对象当前驻留的场景服务的服务地址相同或者不相同,取决于该对象是否发生了迁移,例如在进行查询时,对象A发生了迁移,则客户端中存储的对象A曾经驻留的场景服务的服务地址与对象A当前驻留的场景服务的服务地址不同,即客户端中存储的对象A的历史路由信息失效,客户端需要从数据库中查询对象A当前的路由信息;而对象B没有发生迁移,则客户端中存储的对象B曾经驻留的场景服务的服务地址与对象B当前驻留的场景服务的服务地址相同,即客户端中存储的对象B的历史路由信息依然有效,客户端可以直接根据客户端中存储的对象B的历史路由信息将针对对象B的服务请求发送至对象B所驻留的场景服务,由该场景服务直接处理客户端发送的服务请求。
此外,还需要说明的是,针对对象发生迁移的情况(例如对象A发生了迁移,导致客户端中存储的对象A的历史的路由信息与数据库中存储的对象A的当前的路由信息不同),在从数据库中获取到对象A的当前的路由信息之后,还可以基于从数据库中获取的对象A的当前的路由信息对客户端中存储的对象A的历史的路由信息进行更新,即将客户端中存储的对象A的历史的路由信息更新为从数据库中获取的对象A的当前的路由信息,例如假设客户端中存储的对象A的历史的路由信息包括场景服务A的服务地址,即对象A曾经驻留在场景服务A,随后对象A发生迁移,例如从场景服务A迁移到场景服务B,则客户端从数据库中获取到对象A的当前的路由信息(包括场景服务B的服务地址)后,可以将客户端的缓存中存储的对象A对应的服务地址从场景服务A的服务地址更新为场景服务B的服务地址,如此,通过基于从数据库中获取的对象的当前的路由信息对客户端中存储的对象的历史的路由信息进行更新,后续再针对该对象发送服务请求时可以减少客户端与数据库之间的交互次数,避免了不必要的网络开销和服务延迟。
在另一些实施例中,当根据目标对象的标识未在客户端中查询到目标对象曾经驻留的第一场景服务的第一服务地址时,客户端还可以执行以下处理:根据目标对象的标识查询数据库中存储的多个对象的当前的路由信息,得到目标对象当前驻留的第二场景服务的第二服务地址,其中,每个对象的当前的路由信息包括每个对象的标识、以及每个对象当前驻留的场景服务的服务地址;根据第二服务地址向第二场景服务发送至少一个服务请求。
示例的,以目标对象为对象A为例,当客户端的缓存中存储的多个对象的历史的路由信息中不存在对象A的历史的路由信息(例如对象A是新对象,客户端在历史时间内没有发送过针对对象A的服务请求,因此客户端的缓存中不存在对象A的历史的路由信息)时,则客户端可以执行以下处理:根据对象A的标识查询数据库中存储的多个对象的当前的路由信息(数据库中存储有虚拟场景中全部对象的当前的路由信息),得到对象A的当前的路由信息,其中,对象A的当前的路由信息包括对象A当前驻留的某个场景服务的服务地址(例如场景服务B的服务地址)。
在一些实施例中,承接上述示例,在从数据库中获取到目标对象的路由信息之后,还可以在客户端中存储目标对象的路由信息,其中,目标对象的路由信息用于响应基于标识对客户端的下一次查询,且目标对象的路由信息包括:目标对象的标识、以及第二场景服务的服务地址。
示例的,仍以目标对象为对象A为例,由于客户端的缓存中不存在对象A的历史的路由信息,因此在从数据库中获取到对象A的路由信息(路由信息原指路由器从一个接口上收到数据包,并将数据包转发到另一个接口所需的信息,例如数据包的目的地址,本申请实施例中的路由信息包括对象的标识、以及对象所驻留的场景服务的服务地址,用于供客户端在获取到针对某个对象的服务请求之后根据服务地址向对应的场景服务发送服务请求,例如对象A的路由信息包括对象A的标识、以及对象A当前所驻留的场景服务B的服务地址)之后,可以将对象A的路由信息存储至客户端的缓存中,如此,客户端无需在每次发送针对对象A的服务请求前到数据库中查询对象A的路由信息,即能够减少客户端与数据库之间交互的次数,进而避免了不必要的网络开销和服务延迟。
需要说明的是,在实际应用中,客户端还可以定期从数据库中同步多个对象的路由信息,例如客户端可以每隔固定的时长(例如1天)请求数据库将热门对象(例如针对虚拟场景中的多个对象,统计每个对象在过去一段时间内对应的服务请求发送的次数,并按照服务请求发送的次数进行降序排序,将排序结果中排序靠前的N个对象作为热门对象,其中,N为大于或等于1的正整数)的路由信息同步至客户端,以在客户端的缓存中存储热门对象的路由信息,从而能够减少客户端与数据库之间的交互次数,避免了不必要的网络开销和服务延迟;当然,客户端还可以请求数据库同步虚拟场景中的所有对象的路由信息,以在客户端的缓存中存储所有对象的路由信息,如此,能够进一步提升迁移效率,通过尽量通过查询客户端的方式来完成迁移,减少了对数据库的查询次数,从而减少数据库的负载,本申请实施例对此不作具体限定。
在步骤S102中,客户端根据第一服务地址向第一场景服务发送至少一个服务请求。
在一些实施例中,客户端在获取到目标对象曾经驻留的第一场景服务的第一服务地址之后,可以根据第一服务地址向第一场景服务发送针对目标对象的至少一个服务请求(例如仅发送一个服务请求,或者先后发送多个服务请求),其中,每个服务请求中还可以携带以下信息:目标对象的标识(用于区分不同的服务请求、以及从多个对象中确定出目标对象)、第一场景服务的标识(用于供服务器从多个场景服务中确定出第一场景服务,例如当多个场景服务运行在同一个服务器上时,场景服务的标识可以是IP地址+不同端口号;而当多个场景服务运行在不同的服务器上时,场景服务的标识可以是不同IP地址+特定端口号)。
示例的,以目标对象为对象A为例,客户端在获取到对象A曾经驻留的某个场景服务(例如场景服务A)的服务地址之后,可以根据场景服务A的服务地址向场景服务A发送针对对象A的至少一个服务请求(例如客户端可以仅仅向场景服务A发送一个针对对象A的服务请求,也可以向场景服务A先后发送多个针对对象A的服务请求),其中,每个服务请求中可以携带有对象A的标识以及场景服务A的标识等信息。
在步骤S103中,第一场景服务向客户端返回至少一个服务请求。
在一些实施例中,第一场景服务确定将向客户端返回至少一个服务请求的方式包括以下之一:当目标对象从第一场景服务迁移到第二场景服务时,第一场景服务接收到表征第二场景服务中已经注册目标对象的第二路由信息的更新通知,并根据接收到的更新通知删除第一场景服务中注册的目标对象的第一路由信息之后,确定将向客户端返回至少一个服务请求;当第一场景服务确定目标对象从第一场景服务迁移到第二场景服务,且在第一场景服务中未查询到注册的目标对象的第一路由信息时,确定将向客户端返回至少一个服务请求。
示例的,以目标对象为对象A为例,当对象A从第一场景服务迁移到第二场景服务(例如对象A从场景服务A迁移到场景服务B)时,场景服务A接收到表征场景服务B中已经注册对象A的路由信息的更新通知,并根据接收到的更新通知删除场景对象A中注册的对象A的路由信息之后(即场景服务A中当前不存在对象A的路由信息),确定将向客户端返回针对对象A的至少一个服务请求。
示例的,以目标对象为对象A为例,当第一场景服务(即根据对象A的标识查询客户端,得到的对象A曾经驻留的场景服务,例如场景服务A)确定对象A从第一场景服务迁移到第二场景服务(例如对象A从场景服务A迁移到场景服务B),且在场景服务A中未查询到注册的对象A的路由信息时,确定将向客户端返回针对对象A的至少一个服务请求。
需要说明的是,当目标对象没有发生迁移时,即目标对象当前仍驻留在第一场景服务,则第一场景服务不会向客户端返回至少一个服务请求,而是直接处理客户端发送的针对目标对象的至少一个服务请求。也就是说,第一场景服务仅仅返回发生迁移的对象对应的服务请求,例如当第一场景服务上驻留有多个对象时,例如包括对象A和对象B,其中,对象A发生了迁移(即对象A迁移出第一场景服务),对象B没有发生迁移(即对象B仍然驻留在第一场景服务),则第一场景服务后续在接收到针对对象A的服务请求时,将针对对象A的服务请求返回;而在接收到针对对象B的服务请求时,可以直接进行处理,其中,不同的服务请求可以根据服务请求携带的对象的标识进行确定,例如针对对象A的服务请求中携带有对象A的标识;而针对对象B的服务请求中携带有对象B的标识。
示例的,仍以目标对象为对象A为例,当对象A没有发生迁移时,例如对象A仍然驻留在第一场景服务,则第一场景服务不会向客户端返回针对对象A的至少一个服务请求,而是直接处理客户端发送的针对对象A的至少一个服务请求,并向客户端返回每个服务请求对应的处理结果。
此外,还需要说明的是,第一场景服务向客户端返回至少一个服务请求的方式包括:针对每个服务请求,仅向客户端返回服务请求的标识和拒绝标识,即返回不完整的服务请求,以节约通信流量;或者向客户端返回原始的服务请求和拒绝标识,本申请实施例对返回服务请求的方式不作具体限定。
在步骤S104中,客户端向数据库发送携带目标对象的标识的查询请求。
在一些实施例中,当客户端接收到第一场景服务返回的至少一个服务请求之后(客户端在接收到第一场景服务返回的至少一个服务请求之后,即可确定目标对象发生了迁移,即目标对象当前已经迁移出第一场景服务,也就是说,客户端本地缓存中存储的目标对象的历史路由信息失效),则可以向数据库发送携带目标对象的标识的查询请求,以从数据库中获取目标对象当前的路由信息,即目标对象当前驻留的场景服务的服务地址。
示例的,以目标对象为对象A为例,当客户端接收到第一场景服务返回的针对对象A的至少一个服务请求后,确定对象A已经迁移出第一场景服务,则客户端可以向数据库发送携带对象A的标识的查询请求,以从数据库中获取对象A当前的路由信息,即对象A当前驻留的场景服务的服务地址。
在另一些实施例中,还可以通过以下方式对数据库进行更新:当目标对象从第一场景服务迁移到第二场景服务时,第二场景服务注册目标对象的当前的路由信息,其中,目标对象的当前的路由信息包括:目标对象的标识、以及第二场景服务的第二服务地址,并通知数据库更新数据库中已经存储的目标对象的当前的路由信息(即将目标对象对应的服务地址从迁移前的第一场景服务的第一服务地址替换为迁移后的第二场景服务的第二服务地址)。
示例的,以目标对象为对象A为例,当对象A从第一场景服务(例如场景服务A)迁移到第二场景服务(例如场景服务B)时,场景服务B注册对象A的当前的路由信息(包括对象A的标识、以及场景服务B的服务地址),在注册成功后,场景服务B还会通知数据库更新数据库中已经存储的对象A的当前的路由信息,即将数据库中存储的对象A对应的服务地址从场景服务A的服务地址更新为场景服务B的服务地址,也就是说,当多个对象中的任意一个对象发生迁移时,任意一个对象迁移后所驻留的场景服务在成功注册该对象的路由信息之后,会及时通知数据库更新该对象的当前的路由信息,从而保证了数据库中存储的对象的路由信息始终是最新的路由信息。此外,基于数据库的一致性支持和拓展能力也可以解决单点故障问题,从而保证了多个对象的当前的路由信息的安全性。
需要说明的是,在实际应用中,数据库可以是关系型数据库(存储的格式可以直观地反映实体间的关系,与常见的表格比较相似),例如Mysql、SqlServer等,也可以是非关系型数据库(指的是分布式的、非关系型的、不保证遵循ACID(指数据库管理系统在写入或更新资料的过程中,为保证事务是正确可靠的,所必须具备的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability))原则的数据存储系统),非关系型数据库(NoSQL)通常以数据集的方式进行存储,大量的数据集中存储在一起,类似于键值对、图结构或者文档,本申请实施例对数据库的类型不作具体限定。
在步骤S105中,数据库向客户端返回第二场景服务的第二服务地址。
这里,第二场景服务是目标对象从第一场景服务迁移后所驻留的场景服务,即目标对象当前所驻留的场景服务。
在一些实施例中,数据库中存储有多个对象当前的路由信息(包括目标对象当前的路由信息),其中,每个对象当前的路由信息包括每个对象的标识、以及每个对象当前驻留的场景服务的服务地址,则数据库在接收到客户端发送的携带目标对象的标识的查询请求后,可以根据目标对象的标识从多个对象当前的路由信息中查询到目标对象当前的路由信息,例如目标对象当前的路由信息可以包括目标对象从第一场景服务迁移后当前所驻留的第二场景服务的第二服务地址,随后数据库将查询到的目标对象当前的路由信息(即目标对象从第一场景服务迁移后当前所驻留的第二场景服务的第二服务地址)返回给客户端。
示例的,以目标对象为对象A为例,当数据库接收到客户端发送的携带对象A的标识的查询请求后,根据对象A的标识从数据库中存储的多个对象当前的路由信息中查询到对象A当前的路由信息,例如对象A当前驻留的场景服务的服务地址,接着数据库将查询到的对象A当前的路由信息返回给客户端。
在步骤S106中,客户端根据第二服务地址向第二场景服务发送至少一个服务请求。
这里,第二场景服务用于控制目标对象在第二虚拟场景中的状态。
在一些实施例中,客户端在接收到数据库返回的第二服务场景的第二服务地址(即目标对象当前驻留的场景服务的服务地址)之后,可以根据第二服务地址向第二场景服务发送针对目标对象的至少一个服务请求(即第一场景服务返回的至少一个服务请求),其中,每个服务请求中还可以携带以下信息:目标对象的标识(用于供第二场景服务从多个对象中确定出目标对象)和第二场景服务的标识等。
示例的,以目标对象为对象A为例,客户端在从数据库中获取对象A当前驻留的场景服务(例如场景服务B)的服务地址之后,可以根据场景服务B的服务地址向场景服务B发送针对对象A的至少一个服务请求(例如被场景服务A返回的至少一个服务请求),其中,每个服务请求中可以携带有对象A的标识以及场景服务B的标识等信息。
在另一些实施例中,当至少一个服务请求是先后发送的多个服务请求时,图4示出的步骤S106可以通过图5示出的步骤S1061至步骤S1062实现,将结合图5示出的步骤进行说明。
在步骤S1061中,当多个服务请求中的任意一个服务请求携带拒绝标识被第一场景服务返回时,客户端将任意一个服务请求存入客户端的第一队列中。
这里,多个服务请求均是针对目标对象的服务请求,且多个服务请求在第一队列中是按照发送的先后顺序排列的,即多个服务请求中最先发送的服务请求被第一个存入第一队列中,而多个服务请求中最晚发送的服务请求被最后一个存入第一队列中。
示例的,以目标对象为对象A为例,客户端向第一场景服务(即对象A曾经驻留的场景服务,例如场景服务A)先后发送多个针对对象A的服务请求(例如4个服务请求,包括服务请求1至服务请求4),当场景服务A确定对象A已经迁移出场景服务A时,将接收到的4个针对对象A的服务请求返回,当这4个服务请求中的任意一个服务请求携带拒绝标识被场景服务A返回(例如以任意一个服务请求为服务请求2为例,场景服务A可以针对服务请求2设置拒绝标识,并将携带有拒绝标识的服务请求2返回给客户端)时,客户端将任意一个服务请求存入在客户端中预先部署的第一队列中,且这4个服务请求在第一队列中是按照发送的先后顺序进行排列的,例如假设这4个服务请求发送的先后顺序为服务请求1至服务请求4,则这4个服务请求在第一队列中的排序也是服务请求1至服务请求4,即最先发送的服务请求1排在第一位,而最晚发送的服务请求4排在最后一位,如此,可以保证客户端在重新发送这4个服务请求时与之前的发送顺序保持一致,避免了客户端重新发送这4个服务请求时顺序出现混乱。
在步骤S1062中,客户端响应于第一场景服务返回的第一响应消息,根据第二服务地址向第二场景服务发送第一队列中存储的多个服务请求。
这里,第一响应消息用于通知客户端已经将多个服务请求全部返回,也就是说,当第一场景服务将客户端发送的针对目标对象的所有服务请求返回后,可以向客户端返回第一响应消息,以通知客户端已经将所有发送错误的服务请求全部返回,即客户端在接收到第一场景服务返回的第一响应消息之后才可以执行后续的重发操作,如此,能够避免在服务请求还没有全部返回时,客户端就向第二场景服务发送第一队列中存储的服务请求,导致多个服务请求发送的顺序与之前的发送顺序不一致的情况发生。
示例的,以多个服务请求为服务请求1至服务请求4为例,当第一场景服务将客户端发送的针对目标对象的服务请求1至服务请求4全部返回后,可以向客户端返回第一响应消息,以通知客户端已经将所有接收到的针对目标对象的服务请求全部返回,此时客户端可以根据第二服务地址向第二场景服务发送第一队列中存储的这4个服务请求,如此,在接收到第一场景服务返回的第一响应消息之后,客户端才向第二场景服务发送第一队列中存储的多个服务请求,避免了在第一场景服务还没有返回所有的服务请求之前,就先发送第一队列中存储的服务请求,导致向第二场景服务发送的服务请求的顺序与向第一场景服务发送的服务请求的顺序不一致的情况发生。例如,假设客户端向第一场景服务发送的4个服务请求的先后顺序为服务请求1至服务请求4,如果客户端在没有接收到第一场景服务返回的第一响应消息之前就发送第一场景服务返回的服务请求,例如假设第一场景服务首先返回服务请求2,则客户端首先向第二场景服务发送服务请求2,会导致服务请求发送的先后顺序出现错乱。
需要说明的是,当服务请求的数量为1个(例如客户端仅仅向第一场景服务发送针对目标对象的服务请求A)时,可以不在客户端中设置第一队列,当第一场景服务返回服务请求A时,可以根据第二服务地址直接向第二场景服务发送被第一场景服务返回的服务请求A。
在另一些实施例中,客户端在接收到第一场景服务返回的至少一个服务请求之后,且至少一个服务请求被全部存储到第一队列之前,还可以执行以下处理:获取针对目标对象的至少一个新服务请求;将至少一个新服务请求存储至客户端的第二队列中;当第一队列中存储的多个服务请求发送完毕时,根据第二服务地址向第二场景服务发送第二队列中存储的至少一个新服务请求。
示例的,以目标对象为对象A为例,假设客户端在接收到第一场景服务返回的至少一个服务请求之后,且在将至少一个服务请求全部存储到第一队列之前的期间内还获取到针对对象A的至少一个新服务请求时,还可以执行以下处理:在客户端中设置第二队列,并将获取到的针对对象A的至少一个新服务请求存储至第二队列中(由于客户端之前已经接收到第一场景服务返回的针对对象A的至少一个服务请求,因此客户端在获取到针对对象A的新服务请求时,不会再向第一场景服务发送针对对象A的新服务请求,而是直接将所获取的新服务请求存入第二队列中);当第一队列中存储的多个服务请求(即被第一场景服务返回的多个服务请求,这些服务请求的发送时间早于新服务请求,因此为了避免发送顺序出现混乱,在这些服务请求发送完毕后,才能发送新服务请求)发送完毕时,根据第二服务地址向第二场景服务发送第二队列中存储的针对对象A的至少一个新服务请求,如此,通过将新服务请求存入第二队列中(而不是向第一场景服务发送),并在第一队列中存储的多个服务请求发送完毕后,再发送第二队列中存储的新服务请求,一方面能够保证服务请求发送的顺序不会出现错乱,另一方面也减少了不必要的网络开销和服务延迟。
需要说明的是,当新服务请求的数量为1个时,可以不在客户端中设置第二队列,而是在第一队列中存储的多个服务请求发送完毕时,直接发送新服务请求,从而减少客户端的资源消耗。
在另一些实施例中,参见图6,在执行完图4示出的步骤S103之后,还可以执行图6示出的步骤S107,将结合图6示出的步骤S107进行说明。
在步骤S107中,客户端向第一场景服务发送第二响应消息。
在一些实施例中,客户端可以响应于第一场景服务返回的至少一个服务请求,向第一场景服务发送第二响应消息,其中,第二响应消息用于通知第一场景服务已经确定目标对象迁移出第一场景服务,且后续不会再向第一场景服务发送针对目标对象的服务请求。
示例的,以目标对象为对象A为例,当服务请求的数量为多个,且多个服务请求均是针对对象A时,客户端在接收到第一场景服务返回的第一个服务请求时,即可向第一场景服务发送第二响应消息,以通知第一场景服务已经确定对象A迁移出第一场景服务,且后续不会再向第一场景服务发送针对对象A的服务请求,此外,当客户端接收到第一场景服务返回的其他服务请求时,可以不向第一场景服务发送第二响应消息,即客户端仅向第一场景服务发送一次第二响应消息,以减少不必要的网络开销。
在另一些实施例中,承接上述示例,客户端向第一场景服务发送的第二响应消息还可以供第一场景服务执行以下处理:拒绝响应在第二响应消息之前接收到的针对目标对象的至少一个服务请求,并向客户端返回第三响应消息,其中,第三响应消息用于通知客户端已经拒绝响应接收到的针对目标对象的至少一个服务对象。
示例的,以目标对象为对象A为例,客户端在向第一场景服务发送第二响应消息之后,第一场景服务还可以执行以下处理:拒绝响应在第二响应消息之前接收到的针对目标对象的至少一个服务请求(由于客户端已经通过第二响应消息通知第一场景服务不会再向第一场景服务发送针对目标对象的服务请求,因此第一场景服务只需将在第二响应消息之前接收到的服务请求返回即可),在将第二响应消息之前接收到的所有针对目标对象的服务请求返回后,第一场景服务可以向客户端返回第三响应消息,以通知客户端已经将接收到的针对目标对象的所有服务请求返回。
在一些实施例中,客户端中还可以设置有动态链接库,该动态链接库包括用于执行查询的库文件;客户端通过调用库文件,以转入执行本申请实施例提供的虚拟场景的服务处理方法的步骤,如此,通过动态链接库的方式执行本申请实施例提供的虚拟场景的服务处理方法,提供了一个统一的解决方案,避免了多个业务团队进行重复工作,此外,通过使用这个动态链接库,开发者也无需关心目标对象具体的迁移状态,可以直接根据目标对象的标识将针对目标对象的服务请求发送至目标对象当前所驻留的场景服务,相较于相关技术提供的方案,具有开发运维简单、高性能的优势。
在另一些实施例中,第二场景服务(即目标对象当前所驻留的场景服务)在接收到客户端发送的至少一个服务请求后,可以针对每个服务请求进行处理,并将响应结果依次返回给客户端,如此,客户端可以根据第二场景服务返回的响应结果,在第二虚拟场景(即第二场景服务对应的虚拟场景)中呈现目标对象与响应结果对应的状态,例如当服务请求为减少目标对象的生命值时,客户端可以根据第二场景服务返回的响应结果,在第二虚拟场景中呈现生命值已经减少的目标对象。
本申请实施例提供的虚拟场景的服务处理方法,首先根据目标对象的标识查询客户端,得到目标对象曾经驻留的第一场景服务的第一服务地址,接着根据第一服务地址向第一场景服务发送至少一个服务请求,随后在接收到第一场景服务返回的至少一个服务请求后,根据标识查询数据库,得到目标对象从第一场景服务迁移后所驻留的第二场景服务的第二服务地址,并根据第二服务地址向第二场景服务发送至少一个服务请求,如此,一方面能够在目标对象发生迁移时及时通知客户端进行重新发送;另一方面基于数据库的一致性支持和扩展能力解决了单点故障问题,从而实现能够高效且安全地处理针对目标对象的服务请求。
下面,将说明本申请实施例在游戏中的示例性应用。
本申请实施例提供一种虚拟场景的服务处理方法,将应用层对象与应用层对象所驻留的场景服务之间的映射关系(对应于上述每个对象的路由信息)写入数据库(例如Tcaplus数据库,一种分布式NoSQL数据库,具备缓存+落地融合架构、PB(数据存储容量的单位,它等于2的50次方个字节)级存储、毫秒级时延、以及无损水平扩展和复杂数据结构等特性)中,基于数据库的一致性支持和拓展能力解决了单点故障问题,同时还提供给游戏开发者动态链接库(SO,Shared Object),游戏开发者只需链接该SO而无需使用单独的服务进程,此外还提供了一种请求消息返回和保序机制,确保当应用层对象发生迁移时,客户端发往应用层对象迁移前所驻留的场景服务的请求消息能够被发现并返回给客户端,以使客户端将请求消息重新发送至应用层对象迁移后所驻留的场景服务,且保证两次发送的请求消息不会出现乱序。进一步的,请求消息返回和保序机制可以在提供给游戏开发者的SO中完全封装,对游戏开发者无感知。游戏开发者只需要在开发代码的过程中根据目标应用层对象的ID发送针对目标应用层对象的请求消息即可,无需关注目标应用层对象是否发生了迁移。
本申请实施例提供的虚拟场景的服务处理方法可以应用于游戏后台开发场景,尤其是MMO类型游戏的开发。游戏中的公共资源或者场景角色(例如野怪、世界Boss等)可以称为应用层对象,应用层对象可能会随着用户的操作从一个游戏场景移动到另一个游戏场景,也就对应着应用层对象从一个场景服务迁移到另一个场景服务。
示例的,本申请实施例提供一种交付给游戏开发者使用的一个基于应用层对象路由通信的开发库(对应于上述的动态链接库),游戏开发者只需链接使用开发库即可使用,通过使用这个开发库,游戏开发者无需关心应用层对象的迁移状态,可以直接根据应用层对象的ID向应用层对象当前所驻留的场景服务发送服务请求,而无需关注应用层对象具体处于哪一个场景服务上,对游戏开发者屏蔽全部的技术细节。
示例的,本申请实施例通过记录应用层对象与其所驻留的场景服务之间的映射关系,实现根据应用层对象的ID直接发送服务请求的业务功能,这种映射关系可以存储在Tcaplus数据库中。此外,本申请实施例还在客户端本地设置路由缓存(cache),向目标应用层对象(对应于上述目标对象)发送请求消息(对应于上述的服务请求)时,首先客户端检查本地路由缓存,当本地路由缓存中不存在针对目标应用层对象的历史路由信息时,则根据目标应用层对象的ID直接查询Tcaplus数据库(在Tcaplus数据库中存储有多个应用层对象分别对应的ID、以及每个应用层对象当前所驻留的场景服务的服务地址之间的映射关系),从而得到目标应用层对象当前所驻留的场景服务的服务地址,随后可以根据查询到的服务地址向对应的场景服务发送针对目标应用层对象的请求消息;当本地路由缓存中存在针对目标应用层对象的历史路由信息时,则可以直接根据本地路由缓存中记录的场景服务发送针对目标应用层对象的请求消息。如果目标应用层对象发生了迁移,由于客户端本地路由缓存中记录的是目标应用层对象迁移前所驻留的场景服务(例如场景服务A),则场景服务A会检查到目标应用层对象已经迁移出场景服务A,则可以将客户端发送的请求消息返回,即通过“返回和保序机制”的相关协议,客户端会重新去Tcaplus数据库中查询目标应用层对象发生迁移之后所驻留的场景服务(例如场景服务B)的服务地址,并更新本地路由缓存后重新发送场景服务A返回的请求消息和后续的新请求消息。
示例的,参见图7,图7是本申请实施例提供的虚拟场景的服务处理系统的原理示意图,如图7所示,本申请实施例提供的虚拟场景的服务处理系统可以分为四层:客户端包括的用户接口层和本地路由缓存层、场景服务包括的返回和保序机制和网络接口层、以及数据库层(例如Tcaplus数据库)。此外,需要说明的是,按照消息的发送和接收的功能,可以将客户端、场景服务以及数据库的功能区分为发送侧和接收侧(例如当客户端接收场景服务的响应消息时,则由客户端的接收侧进行处理;而当客户端向场景服务发送请求消息时,由客户端的发送侧进行处理),为方便描述,下面的说明中不再具体区分2侧。
继续参见图7,图7中示出的客户端包括的用户接口层用于供用户调用(例如游戏开发者在编写游戏代码时可以直接调用用户接口层进行查询,而无需关注具体的技术细节),包括应用层对象的注册、查询、向目标应用层对象发送请求消息的发送方法等;本地路由缓存层是应用层对象的一个本地缓存,目的是减少客户端访问数据库的次数,提升性能;场景服务包括的返回和保序机制和网络接口层共同支撑起内部网络发送方式,当目标应用层对象发生迁移时,返回和保序机制可以确保将请求消息发送至目标应用层迁移后所驻留的场景服务上;数据库层(例如Tcaplus数据库)用于存储游戏中的多个应用层对象的当前的路由信息。
下面对本申请实施例提供的返回和保序机制进行具体说明。
在一些实施例中,当应用层对象发生迁移时,仅仅是在Tcaplus数据库中发生数据条目的变化,不会通知客户端(例如应用层对象从场景服务A迁移到场景服务B时,场景服务B并不会向客户端通知应用层对象的迁移信息,导致客户端中存储的本地路由信息失效),因此本申请实施例提供了返回和保序机制来解决应用层对象发生迁移导致的客户端本地路由缓存失效的问题。
示例的,可以在客户端中预先设置两个队列,包括返回队列(对应于上述的第一队列)和发送队列(对应于上述的第二队列),应用层对象发生迁移之后,客户端查询本地路由缓存(由于缓存中记录的是应用层对象迁移前所驻留的场景服务的服务地址)后仍然会将针对应用层对象的请求消息发送至迁移前的场景服务(例如场景服务A),场景服务A在接收到客户端发送的请求消息后,确定该应用层对象已经不属于本场景服务,则会将请求消息完整返回,并设置返回标记(对应于上述的拒绝标识)。客户端在接收到场景服务A返回的请求消息之后,首先将被返回的请求消息存入返回队列中,然后根据应用层对象的ID查询Tcaplus数据库,以获取应用层对象迁移后所驻留的场景服务(例如场景服务B)的服务地址,最后客户端还可以向场景服务A发送回响(echo)请求消息(对应于上述的第二响应消息)。其中,echo请求消息代表着客户端通知场景服务A已经确定目前该应用层对象发生了迁移,并且后续不会再继续将针对该应用层对象的请求消息发送至场景服务A。如此,场景服务A只需要将接收到客户端发送的echo请求消息之前的全部错误请求消息返回(客户端已经通过echo请求消息承诺不会再向场景服务A发送针对该应用层对象的请求消息),然后向客户端发送echo响应消息(对应于上述的第一响应消息)即可。
客户端在发送完毕echo请求消息之后,可以将后续针对该应用层对象的请求消息全部缓存到发送队列中,在接收到场景服务A返回的echo响应消息之前不能将发送队列中存储的请求消息发送出去(为了避免请求消息发送的顺序出现错乱)。对于客户端而言,在通过接收侧接收到场景服务A返回的echo响应消息之后,意味着场景服务A已经将全部需要返回的请求消息返回了,也就是说,当前返回队列中存储的请求消息一定是早于发送队列中存储的请求消息。
客户端在通过Tcaplus数据库查询到应用层对象当前所驻留的场景服务(例如场景服务B)的服务地址之后,可以根据查询到的服务地址将返回队列中存储的请求消息全部发送到场景服务B,但是不能发送发送队列中存储的请求消息,因为可能有请求消息正在返回过程中,如果直接发送发送队列中存储的请求消息可能发生乱序。因此,客户端在接收到场景服务A返回的echo响应消息之后,表示所有需要返回的请求消息都已经返回了,才向场景服务B依次发送返回队列和发送队列中存储的请求消息。
示例的,参见图8,图8是本申请实施例提供的虚拟场景的服务处理方法的流程示意图,将结合图8示出的步骤进行说明。
在步骤S801中,客户端经由接入服务向场景服务A发送请求消息。
在一些实施例中,客户端可以通过接入服务代理客户端向后台服务发送针对目标应用层对象的请求消息。例如根据客户端本地路由缓存确定目标应用层对象在场景服务A上,则客户端可以经由接入服务向场景服务A发送针对目标应用层对象的请求消息。
在步骤S802中,客户端向场景服务A发送请求消息1。
在一些实施例中,当目标应用层对象没有发生迁移时,例如目标应用层对象仍然驻留在场景服务A,则场景服务A在接收到客户端经由接入服务发送的针对目标应用层对象的请求消息1时,直接针对请求消息1进行处理。
在步骤S803中,目标应用层对象从场景服务A迁移到场景服务B。
在一些实施例中,当目标应用层对象发生迁移时,例如目标应用层对象从场景服务A迁移到场景服务B,则客户端后续向场景服务A发送的针对目标应用层对象的请求消息会触发返回和保序机制。
在步骤S804中,场景服务B开始注册路由。
在一些实施例中,当目标应用层对象从场景服务A迁移到场景服务B时,场景服务B可以在本地注册针对目标应用层对象的路由信息。
在步骤S805中,场景服务A开始注销路由。
在一些实施例中,当目标应用层对象迁移出场景服务A时,场景服务A可以开始在本地注销针对目标应用层对象的路由信息。
在步骤S806中,客户端向场景服务A发送请求消息2。
在步骤S807中,客户端向场景服务A发送请求消息3。
在一些实施例中,客户端在发送针对目标应用层对象的请求消息2和请求消息3时,根据客户端本地路由缓存记录的服务地址(由于本地路由缓存并没有更新,记录的仍然是目标应用层对象迁移前所驻留的场景服务A的服务地址),仍然会将请求消息2和请求消息3发送至场景服务A。
在步骤S808中,场景服务A向接入服务返回请求消息2。
在一些实施例中,当场景服务A接收到客户端发送的针对目标应用层对象的请求消息2时,确定目标应用层对象已经迁移出场景服务A,则场景服务A向接入服务返回请求消息2。
在步骤S809中,接入服务向场景服务A发送echo请求消息。
在一些实施例中接入服务在接收到场景服务A返回的请求消息2时,可以向场景服务A发送echo请求消息,以通知场景服务A已经确定目标应用层对象发生迁移,后续不会再针对该目标应用层对象发送错误的请求消息至场景服务A。
在步骤S810中,接入服务设置迁移标志。
在步骤S811中,接入服务将请求消息2存入返回队列。
在一些实施例中,接入服务在接收到场景服务A返回的针对目标应用层对象的请求消息2之后,可以将请求消息2存入客户端中预先设置的返回队列中。
在步骤S812中,客户端向接入服务发送请求消息4。
在步骤S813中,接入服务将请求消息4存入发送队列。
在一些实施例中,当接入服务接收到客户端发送的针对目标应用层对象的请求消息4时,由于该目标对应层对象处于返回和保序流程中,因此请求消息4没有被发送,而是直接存入发送队列中。
在步骤S814中,场景服务A向接入服务返回请求消息3。
在步骤S815中,接入服务将请求消息3存入返回队列。
在一些实施例中,接入服务在接收到场景服务A返回的针对目标应用层对象的请求消息3之后,可以将请求消息3也存入返回队列中,其中,返回队列中存储的多个请求消息是按照发送的先后顺序进行排序的,因为请求消息3的发送时间晚于请求消息2,因此请求消息3排在请求消息2的后面。
在步骤S816中,场景服务B注册路由成功。
在一些实施例中,当场景服务B成功注册目标应用层对象的路由信息之后,还可以通知数据库针对数据库中存储的目标应用层对象的路由信息进行更新,例如将目标应用层对象对应的服务地址从迁移前的场景服务A的服务地址更新为迁移后的场景服务B的服务地址。
在步骤S817中,接入服务查询目标应用层对象当前的路由信息。
在一些实施例中,接入服务还可以根据目标应用层对象的ID查询Tcaplus数据库,以获取目标应用层对象当前的路由信息(即目标对应层对象迁移后所驻留的场景服务的服务地址,例如场景服务B的服务地址)。
在步骤S818中,接入服务设置查询路由标志。
在步骤S819中,场景服务A向接入服务发送echo响应消息。
在一些实施例中,场景服务A在将所有需要返回的请求消息(例如请求消息2和请求消息3)返回接入服务后,可以向接入服务返回echo响应消息,以通知接入服务已经将所有需要返回的请求消息返回。
在步骤S820中,接入服务设置全部返回标志,将队列中存储的请求消息发送给场景服务B。
在步骤S821中,接入服务将返回队列中存储的请求消息2发送至场景服务B。
在步骤S822中,接入服务将返回队列中存储的请求消息3发送至场景服务B。
在步骤S823中,接入服务将发送队列中存储的请求消息4发送至场景服务B。
在一些实施例中,接入服务根据目标应用层对象的ID从Tcaplus数据库中获取到目标应用层对象迁移后所驻留的场景服务(例如场景服务B)的服务地址之后,可以根据服务地址依次发送返回队列中的请求消息2和请求消息3、以及发送队列中的请求消息4,由于返回队列中存储的请求消息来自于接入服务未进入返回和保序流程之前发送的请求消息,而发送队列中存储的请求消息来自于接入服务进入返回和保序流程之后的待发送的请求消息,因此返回队列中存储的请求消息一定是在发送队列之前。
本申请实施例提供的虚拟场景的服务处理方法,相较于相关技术提供的方案,具有以下优势:
1)提供了通用的技术解决方案,游戏开发者可以直接使用,不需要单独开发。
2)以动态链接库的方式嵌入到游戏的业务进程中,不需要单独维护一个服务进程,从而减少了不必要的网络开销。
3)每个应用层对象的路由信息(即应用层对象与应用层对象所驻留的场景服务之间的映射关系)存储在Tcaplus数据库中,基于数据库的一致性支持和拓展能力解决了相关技术中存在的单点故障问题。
4)使用缓存技术,在需要发送针对目标应用层对象的请求消息时,首先从客户端本地路由缓存中进行查找,不需要频繁查询数据库,降低了不必要的网络开销和服务延迟,提升了服务性能,同时还使用返回和保序机制解决了当应用层对象发生迁移时客户端本地路由缓存失效的问题。
总而言之,本申请实施例提供的虚拟场景的服务处理方法,相较于相关技术提供的方案,具有开发运维简单、低延迟、高性能、以及无单点故障风险等优势。
下面继续说明本申请实施例提供的虚拟场景的服务处理装置465的实施为软件模块的示例性结构,在一些实施例中,如图3所示,存储在存储器460的虚拟场景的服务处理装置465中的软件模块可以包括:查询模块4651和发送模块4652。
查询模块4651,用于根据目标对象的标识查询客户端,得到目标对象曾经驻留的第一场景服务的第一服务地址,其中,第一场景服务用于控制目标对象在第一虚拟场景中的状态;发送模块4652,用于根据第一服务地址向第一场景服务发送至少一个服务请求;查询模块4651,还用于响应于第一场景服务返回的至少一个服务请求,根据标识查询数据库,得到第二场景服务的第二服务地址,其中,第二场景服务是目标对象从第一场景服务迁移后所驻留的场景服务;发送模块4652,还用于根据第二服务地址向第二场景服务发送至少一个服务请求,其中,第二场景服务用于控制目标对象在第二虚拟场景中的状态。
在一些实施例中,当根据目标对象的标识未在客户端中查询到目标对象曾经驻留的第一场景服务的第一服务地址时,查询模块4651,还用于根据目标对象的标识查询数据库中存储的多个对象的当前的路由信息,得到目标对象当前驻留的第二场景服务的第二服务地址,其中,每个对象的当前的路由信息包括每个对象的标识、以及每个对象当前驻留的场景服务的服务地址;发送模块4652,还用于根据第二服务地址向第二场景服务发送至少一个服务请求。
在一些实施例中,虚拟场景的服务处理装置465还包括存储模块4653,用于在客户端中存储目标对象的路由信息,其中,目标对象的路由信息用于响应基于标识对客户端的下一次查询,且目标对象的路由信息包括:目标对象的标识、以及第二场景服务的第二服务地址。
在一些实施例中,查询模块4651,还用于根据目标对象的标识查询客户端中存储的多个对象的历史的路由信息,得到目标对象曾经驻留的第一场景服务的第一服务地址;其中,每个对象的历史的路由信息包括每个对象的标识、以及每个对象曾经驻留的场景服务的服务地址。
在一些实施例中,查询模块4651,还用于根据目标对象的标识查询数据库中存储的多个对象当前的路由信息,得到目标对象从第一场景服务迁移后当前所驻留的第二场景服务的第二服务地址,其中,每个对象当前的路由信息包括每个对象的标识、以及每个对象当前驻留的场景服务的服务地址。
在一些实施例中,数据库的更新方式包括:当目标对象从第一场景服务迁移到第二场景服务时,第二场景服务注册目标对象的当前的路由信息,其中,目标对象的当前的路由信息包括:目标对象的标识、以及第二场景服务的第二服务地址,并通知数据库更新数据库中已经存储的目标对象的当前的路由信息。
在一些实施例中,第一场景服务确定将返回至少一个服务请求的方式包括以下之一:当目标对象从第一场景服务迁移到第二场景服务时,第一场景服务接收到表征第二场景服务中已经注册目标对象的第二路由信息的更新通知,并根据更新通知删除第一场景服务中注册的目标对象的第一路由信息后,确定将返回至少一个服务请求;当第一场景服务确定目标对象从第一场景服务迁移到第二场景服务,且在第一场景服务中未查询到注册的目标对象的第一路由信息时,确定将返回至少一个服务请求。
在一些实施例中,当至少一个服务请求是先后发送的多个服务请求时,存储模块4653,还用于当多个服务请求中的任意一个服务请求携带拒绝标识被返回时,将任意一个服务请求存入客户端的第一队列中,其中,多个服务请求在第一队列中是按照发送的先后顺序排列的;发送模块4652,还用于响应于第一场景服务返回的第一响应消息,根据第二服务地址向第二场景服务发送第一队列中存储的多个服务请求,其中,第一响应消息用于通知客户端已经将多个服务请求全部返回。
在一些实施例中,虚拟场景的服务处理装置465还包括获取模块4654,用于获取针对目标对象的至少一个新服务请求;存储模块4653,还用于将至少一个新服务请求存储至客户端的第二队列中;发送模块4652,还用于当第一队列中存储的多个服务请求发送完毕时,根据第二服务地址向第二场景服务发送第二队列中存储的至少一个新服务请求。
在一些实施例中,发送模块4652,还用于响应于第一场景服务返回的至少一个服务请求,向第一场景服务发送第二响应消息,其中,第二响应消息用于通知第一场景服务已经确定目标对象迁移出第一场景服务,且后续不会再向第一场景服务发送针对目标对象的服务请求。
在一些实施例中,第二响应消息还用于供第一场景服务执行以下处理:拒绝响应在第二响应消息之前接收到的针对目标对象的至少一个服务请求,并向客户端返回第三响应消息,其中,第三响应消息用于通知客户端已经拒绝响应接收到的针对目标对象的至少一个服务请求。
在一些实施例中,客户端中设置有动态链接库,动态链接库包括用于执行查询的库文件;虚拟场景的服务处理装置465还包括调用模块4655,用于调用库文件,以转入执行本申请实施例提供的虚拟场景的服务处理方法。
需要说明的是,本申请实施例中关于装置的描述,与上文中虚拟场景的服务处理方法的实现是类似的,并具有相似的有益效果,因此不做赘述。对于本申请实施例提供的虚拟场景的服务处理装置中未尽的技术细节,可以根据图4-6、或图8任一附图的说明而理解。
本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本申请实施例上述的虚拟场景的服务处理方法。
本申请实施例提供一种存储有可执行指令的计算机可读存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本申请实施例提供的虚拟场景的服务处理方法,例如,如图4-6、或图8示出的虚拟场景的服务处理方法。
在一些实施例中,计算机可读存储介质可以是FRAM、ROM、PROM、EPROM、EEPROM、闪存、磁表面存储器、光盘、或CD-ROM等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(HTML,Hyper TextMarkup Language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。
作为示例,可执行指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
综上所述,本申请实施例首先根据目标对象的标识查询客户端,得到目标对象曾经驻留的第一场景服务的第一服务地址,接着根据第一服务地址向第一场景服务发送至少一个服务请求,随后在接收到第一场景服务返回的至少一个服务请求后,根据标识查询数据库,得到目标对象从第一场景服务迁移后所驻留的第二场景服务的第二服务地址,并根据第二服务地址向第二场景服务发送至少一个服务请求,如此,一方面能够在目标对象发生迁移时及时通知客户端进行重新发送;另一方面基于数据库的一致性支持和扩展能力解决了单点故障问题,从而实现能够高效且安全地处理针对目标对象的服务请求。
以上所述,仅为本申请的实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本申请的保护范围之内。
Claims (13)
1.一种虚拟场景的服务处理方法,其特征在于,所述方法包括:
根据目标对象的标识查询客户端,得到所述目标对象曾经驻留的第一场景服务的第一服务地址,其中,所述第一场景服务用于控制所述目标对象在第一虚拟场景中的状态;
根据所述第一服务地址向所述第一场景服务发送至少一个服务请求;
响应于所述第一场景服务返回的所述至少一个服务请求,根据所述标识查询数据库,得到第二场景服务的第二服务地址,其中,所述第二场景服务是所述目标对象从所述第一场景服务迁移后所驻留的场景服务,所述第一场景服务确定将返回所述至少一个服务请求的方式包括以下之一:当所述目标对象从所述第一场景服务迁移到所述第二场景服务时,所述第一场景服务接收到表征所述第二场景服务中已经注册所述目标对象的第二路由信息的更新通知,并根据所述更新通知删除所述第一场景服务中注册的所述目标对象的第一路由信息后,确定将返回所述至少一个服务请求;当所述第一场景服务确定所述目标对象从所述第一场景服务迁移到所述第二场景服务,且在所述第一场景服务中未查询到注册的所述目标对象的第一路由信息时,确定将返回所述至少一个服务请求;
根据所述第二服务地址向所述第二场景服务发送所述至少一个服务请求,其中,所述第二场景服务用于控制所述目标对象在第二虚拟场景中的状态。
2.根据权利要求1所述的方法,其特征在于,当根据所述标识未在所述客户端中查询到所述目标对象曾经驻留的第一场景服务的第一服务地址时,所述方法还包括:
根据所述标识查询数据库中存储的多个对象的当前的路由信息,得到所述目标对象当前驻留的第二场景服务的第二服务地址,其中,每个所述对象的当前的路由信息包括每个所述对象的标识、以及每个所述对象当前驻留的场景服务的服务地址;
根据所述第二服务地址向所述第二场景服务发送所述至少一个服务请求。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
在所述客户端中存储所述目标对象的路由信息,其中,所述目标对象的路由信息用于响应基于所述标识对所述客户端的下一次查询,且所述目标对象的路由信息包括:所述目标对象的标识、以及所述第二场景服务的第二服务地址。
4.根据权利要求1所述的方法,其特征在于,所述根据目标对象的标识查询客户端,得到所述目标对象曾经驻留的第一场景服务的第一服务地址,包括:
根据所述目标对象的标识查询所述客户端中存储的多个对象的历史的路由信息,得到所述目标对象曾经驻留的第一场景服务的第一服务地址;其中,每个所述对象的历史的路由信息包括每个所述对象的标识、以及每个所述对象曾经驻留的场景服务的服务地址。
5.根据权利要求1所述的方法,其特征在于,所述根据所述标识查询数据库,得到第二场景服务的第二服务地址,包括:
根据所述目标对象的标识查询数据库中存储的多个对象当前的路由信息,得到所述目标对象从所述第一场景服务迁移后当前所驻留的第二场景服务的第二服务地址,其中,每个所述对象当前的路由信息包括每个所述对象的标识、以及每个所述对象当前驻留的场景服务的服务地址。
6.根据权利要求5所述的方法,其特征在于,所述数据库的更新方式包括:
当所述目标对象从所述第一场景服务迁移到所述第二场景服务时,所述第二场景服务注册所述目标对象的当前的路由信息,其中,所述目标对象的当前的路由信息包括:所述目标对象的标识、以及所述第二场景服务的第二服务地址,并通知所述数据库更新所述数据库中已经存储的所述目标对象的当前的路由信息。
7.根据权利要求1所述的方法,其特征在于,当所述至少一个服务请求是先后发送的多个服务请求时,所述根据所述第二服务地址向所述第二场景服务发送所述至少一个服务请求,包括:
当所述多个服务请求中的任意一个服务请求携带拒绝标识被返回时,将所述任意一个服务请求存入所述客户端的第一队列中,其中,所述多个服务请求在所述第一队列中是按照发送的先后顺序排列的;
响应于所述第一场景服务返回的第一响应消息,根据所述第二服务地址向所述第二场景服务发送所述第一队列中存储的所述多个服务请求,其中,所述第一响应消息用于通知所述客户端已经将所述多个服务请求全部返回。
8.根据权利要求7所述的方法,其特征在于,在接收到所述第一场景服务返回的所述至少一个服务请求之后,且所述至少一个服务请求被全部存储到所述第一队列之前,所述方法还包括:
获取针对所述目标对象的至少一个新服务请求;
将所述至少一个新服务请求存储至所述客户端的第二队列中;
当所述第一队列中存储的所述多个服务请求发送完毕时,根据所述第二服务地址向所述第二场景服务发送所述第二队列中存储的所述至少一个新服务请求。
9.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应于所述第一场景服务返回的所述至少一个服务请求,向所述第一场景服务发送第二响应消息,其中,所述第二响应消息用于通知所述第一场景服务已经确定所述目标对象迁移出所述第一场景服务,且后续不会再向所述第一场景服务发送针对所述目标对象的服务请求。
10.根据权利要求1所述的方法,其特征在于,
所述客户端中设置有动态链接库,所述动态链接库包括用于执行所述查询的库文件;
调用所述库文件,以转入执行权利要求1-9任一项所述的虚拟场景的服务处理方法的步骤。
11.一种虚拟场景的服务处理装置,其特征在于,所述装置包括:
查询模块,用于根据目标对象的标识查询客户端,得到所述目标对象曾经驻留的第一场景服务的第一服务地址,其中,所述第一场景服务用于控制所述目标对象在第一虚拟场景中的状态;
发送模块,用于根据所述第一服务地址向所述第一场景服务发送至少一个服务请求;
所述查询模块,还用于响应于所述第一场景服务返回的所述至少一个服务请求,根据所述标识查询数据库,得到第二场景服务的第二服务地址,其中,所述第二场景服务是所述目标对象从所述第一场景服务迁移后所驻留的场景服务,所述第一场景服务确定将返回所述至少一个服务请求的方式包括以下之一:当所述目标对象从所述第一场景服务迁移到所述第二场景服务时,所述第一场景服务接收到表征所述第二场景服务中已经注册所述目标对象的第二路由信息的更新通知,并根据所述更新通知删除所述第一场景服务中注册的所述目标对象的第一路由信息后,确定将返回所述至少一个服务请求;当所述第一场景服务确定所述目标对象从所述第一场景服务迁移到所述第二场景服务,且在所述第一场景服务中未查询到注册的所述目标对象的第一路由信息时,确定将返回所述至少一个服务请求;
所述发送模块,还用于根据所述第二服务地址向所述第二场景服务发送所述至少一个服务请求,其中,所述第二场景服务用于控制所述目标对象在第二虚拟场景中的状态。
12.一种电子设备,其特征在于,所述电子设备包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现权利要求1-10任一项所述的虚拟场景的服务处理方法。
13.一种计算机可读存储介质,存储有可执行指令,其特征在于,所述可执行指令被处理器执行时实现权利要求1-10任一项所述的虚拟场景的服务处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111120037.4A CN113559499B (zh) | 2021-09-24 | 2021-09-24 | 虚拟场景的服务处理方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111120037.4A CN113559499B (zh) | 2021-09-24 | 2021-09-24 | 虚拟场景的服务处理方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113559499A CN113559499A (zh) | 2021-10-29 |
CN113559499B true CN113559499B (zh) | 2021-12-24 |
Family
ID=78174289
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111120037.4A Active CN113559499B (zh) | 2021-09-24 | 2021-09-24 | 虚拟场景的服务处理方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113559499B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114070853A (zh) * | 2021-11-15 | 2022-02-18 | 网易(杭州)网络有限公司 | 沉浸式活动系统及其应用方法和电子设备 |
CN114615521B (zh) * | 2022-03-10 | 2024-02-23 | 网易(杭州)网络有限公司 | 视频处理方法和装置、计算机可读存储介质、电子设备 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106598438A (zh) * | 2016-12-22 | 2017-04-26 | 腾讯科技(深圳)有限公司 | 一种基于移动终端的场景切换方法及移动终端 |
CN109663354A (zh) * | 2018-12-04 | 2019-04-23 | 无锡天脉聚源传媒科技有限公司 | 一种游戏场景切换的处理方法及系统 |
CN110898428A (zh) * | 2019-11-12 | 2020-03-24 | 腾讯科技(深圳)有限公司 | 多虚拟对象交互的方法、装置、服务器及存储介质 |
CN110947178A (zh) * | 2019-11-20 | 2020-04-03 | 咪咕互动娱乐有限公司 | 游戏切换方法、电子设备及存储介质 |
CN111803929A (zh) * | 2020-05-26 | 2020-10-23 | 厦门雅基软件有限公司 | 控制对象的切换方法、装置、电子设备及计算机存储介质 |
CN112153420A (zh) * | 2020-09-16 | 2020-12-29 | 成都完美天智游科技有限公司 | 场景切换系统、方法、服务器和存储介质 |
CN112169327A (zh) * | 2020-10-29 | 2021-01-05 | 腾讯科技(深圳)有限公司 | 一种云游戏的控制方法以及相关装置 |
CN113101650A (zh) * | 2021-04-28 | 2021-07-13 | 网易(杭州)网络有限公司 | 游戏场景切换方法、装置、计算机设备及存储介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7016532B2 (en) * | 2000-11-06 | 2006-03-21 | Evryx Technologies | Image capture and identification system and process |
CN101626566B (zh) * | 2008-07-07 | 2011-12-21 | 华为技术有限公司 | 实现isr场景下终端迁移的方法和设备 |
US9634942B2 (en) * | 2013-11-11 | 2017-04-25 | Amazon Technologies, Inc. | Adaptive scene complexity based on service quality |
US10183222B2 (en) * | 2016-04-01 | 2019-01-22 | Glu Mobile Inc. | Systems and methods for triggering action character cover in a video game |
-
2021
- 2021-09-24 CN CN202111120037.4A patent/CN113559499B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106598438A (zh) * | 2016-12-22 | 2017-04-26 | 腾讯科技(深圳)有限公司 | 一种基于移动终端的场景切换方法及移动终端 |
CN109663354A (zh) * | 2018-12-04 | 2019-04-23 | 无锡天脉聚源传媒科技有限公司 | 一种游戏场景切换的处理方法及系统 |
CN110898428A (zh) * | 2019-11-12 | 2020-03-24 | 腾讯科技(深圳)有限公司 | 多虚拟对象交互的方法、装置、服务器及存储介质 |
CN110947178A (zh) * | 2019-11-20 | 2020-04-03 | 咪咕互动娱乐有限公司 | 游戏切换方法、电子设备及存储介质 |
CN111803929A (zh) * | 2020-05-26 | 2020-10-23 | 厦门雅基软件有限公司 | 控制对象的切换方法、装置、电子设备及计算机存储介质 |
CN112153420A (zh) * | 2020-09-16 | 2020-12-29 | 成都完美天智游科技有限公司 | 场景切换系统、方法、服务器和存储介质 |
CN112169327A (zh) * | 2020-10-29 | 2021-01-05 | 腾讯科技(深圳)有限公司 | 一种云游戏的控制方法以及相关装置 |
CN113101650A (zh) * | 2021-04-28 | 2021-07-13 | 网易(杭州)网络有限公司 | 游戏场景切换方法、装置、计算机设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
基于Pomelo框架的分布式游戏服务器设计;毛炜朋等;《电子设计工程》;20190505;第27卷(第9期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN113559499A (zh) | 2021-10-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113559499B (zh) | 虚拟场景的服务处理方法、装置、电子设备及存储介质 | |
CN107438060B (zh) | 一种网络设备中的远程过程调用方法及网络设备 | |
KR20200088827A (ko) | 블록체인 기반 스마트 계약 호출 방법 및 장치, 전자 디바이스 | |
CN101604358B (zh) | 一种资源更新方法、装置和系统 | |
US8862743B1 (en) | Resource management | |
CN111880899B (zh) | 一种基于云原生架构的大数据流处理方法和装置 | |
US11416305B2 (en) | Commands for simulation systems and methods | |
CN105283847A (zh) | 本地存储数据版本控制 | |
CN112698921A (zh) | 一种逻辑代码运行方法、装置、计算机设备和存储介质 | |
WO2024066828A1 (zh) | 一种数据处理方法、装置、设备、计算机可读存储介质及计算机程序产品 | |
Bernstein et al. | Developing cloud services using the orleans virtual actor model | |
JP2019536506A (ja) | ユーザ活動情報を共有する方法およびシステム | |
JP2019021312A (ja) | イベント基盤パッケージモジュールの呼び出し方法およびシステム | |
Satoh | Mobile agents | |
CN116204239A (zh) | 业务处理方法、装置和计算机可读存储介质 | |
CN113704204A (zh) | 数据文件处理方法、装置、电子设备及存储介质 | |
CN113254217A (zh) | 业务的消息处理方法、装置及电子设备 | |
CN113157452B (zh) | 应用服务请求方法、装置、计算机设备及存储介质 | |
CN111318023B (zh) | 游戏数据处理方法、装置、存储介质与电子设备 | |
CN113542323B (zh) | 业务处理方法、装置、设备及计算机可读存储介质 | |
CN116954810A (zh) | 容器应用实例的创建方法、系统、存储介质及程序产品 | |
KR102133925B1 (ko) | 데이터 동기화 트래픽을 최소화하기 위한 방법 및 시스템 | |
CN115484303A (zh) | 工厂微服务系统、方法、设备和存储介质 | |
US11593030B2 (en) | Cross-stream transactions in a streaming data storage system | |
CN113209635B (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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40052873 Country of ref document: HK |