解耦游戏服务和战斗服务的方法、存储介质与流程

文档序号:18450673发布日期:2019-08-17 01:14阅读:229来源:国知局
解耦游戏服务和战斗服务的方法、存储介质与流程

本发明涉及游戏服务领域,具体涉及解耦游戏服务和战斗服务的方法、存储介质。



背景技术:

游戏服务端根据业务不同,一般分成游服(游戏服务:负责处理玩家游戏非密集计算的业务逻辑以及大厅等管理的服务器)与战服(战斗服务:用来完成计算游戏过程中密集交互的服务器)。

具体的,游服提供玩家非战斗场景请求服务,如玩家基本信息、玩家背包装备、大厅等服务;战服主要是追求极速的战斗交互,性能要求与游戏服务大相径庭。因此,二者一般使用不同的实现方式,部署也不相同。然而,游服与战服之间是需要交互的,比如战斗结束后结算、请求战斗房间(从技术上讲就是为某战斗场景开辟一段内存空间)等。因此正规上,战服部署后的ip与端口需要告知游服,彼此之间形成互相依赖的一个整体。事实上,这就存在几个明显不便之处:第一、从架构上说,游服与战服形成依赖,游服一定需要知道战服的部署情况,多战服情况下,游服还需要一个仲裁机制来决定去请求哪个战服。第二、从运维的角度看,对部署一整套游戏服务端而言,配置较繁杂,且不易于操作。



技术实现要素:

本发明所要解决的技术问题是:提供解耦游戏服务和战斗服务的方法、存储介质,通过解耦能够简化游戏服务查找战斗服务的过程,同时大大简化维护工作。

为了解决上述技术问题,本发明采用的技术方案为:

解耦游戏服务和战斗服务的方法,包括:

战斗服务监听mq服务上的队列q;

游戏服务在mq服务上创建一与其对应的队列m,并监听所述队列m;

当游戏服务接收到对应战斗服务的交互请求时,在所述队列q上对应所述交互请求生产一队列q消息,并将所述队列m的唯一标识符添加至所述一队列q消息;

任一战斗服务监听到所述一队列q消息后,从中提取所述唯一标识符,并依据处理所述一队列q消息得到的交互反馈信息向所述唯一标识符对应的所述队列m生产一队列m消息。

本发明提供的另一个技术方案为:

一种计算机可读存储介质,其上存储有计算机程序,所是程序在被处理器读取并执行后,能实现上述解耦游戏服务和战斗服务的方法所包含的步骤。

本发明的有益效果在于:在创建链接过程,借助消息队列中间件(mq服务)将战斗服务和游戏服务彻底解耦。具体在游戏服务与战斗服务交互过程中,约定mq服务的队列q即作为游戏服务生产消息的队列,又作为战斗服务消费消息的队列;游戏服务依据接收到的交互请求向该队列生产消息,该消息中包含游戏服务消费的队列m;后续,战斗服务消费该消息时,将通过队列m返回反馈信息。由此,游戏服务只需经过一生产一消费,战斗服务经过一消费一生产的过程,便可创建二者的对等通信交互关系。本发明能够彻底的解除游戏服务和战斗服务在架构上的依赖关系,不仅简化了游戏服务查找战斗服务的过程,同时大大减轻游戏服务的业务负担,从而显著交互效率;而且也大大简化了维护工作,只需维护游戏服务和战斗服务各自与mq的依赖关系,而不用再维护游戏服务内的战斗服务列表。

附图说明

图1为本发明实施例一种解耦游戏服务和战斗服务的方法的流程示意图;

图2为本发明实施例一一种基于mq解耦游戏服务和战斗服务创建房间的方法交互示意图;

图3为本发明实施例二的系统架构示意图。

具体实施方式

为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。

本发明最关键的构思在于:利用消息队列中间件(mq服务)作为游戏服务和战斗服务交互创建对等链接的消息中转方,使游戏服务和战斗服务彻底解耦。

本发明涉及的技术术语解释:

请参照图1,本发明提供解耦游戏服务和战斗服务的方法,包括:

战斗服务监听mq服务上的队列q;

游戏服务在mq服务上创建一与其对应的队列m,并监听所述队列m;

当游戏服务接收到对应战斗服务的交互请求时,在所述队列q上对应所述交互请求生产一队列q消息,并将所述队列m的唯一标识符添加至所述一队列q消息;

任一战斗服务监听到所述一队列q消息后,从中提取所述唯一标识符,并依据处理所述一队列q消息得到的交互反馈信息向所述唯一标识符对应的所述队列m生产一队列m消息。

从上述描述可知,本发明的有益效果在于:能够将游服与战服彻底分离,游服完全不必要知道当前战服配置什么,也不必知道哪些战服是可用的,而这些特性都是由mq保证;且当前战服没有能力消费队列消息时,此消息会被下一个有能力消费的战服消费,能够确保及时消费消息。从服务性能而言,能够大大降低游服的业务负担,同时提高交互效率;从开发角度而言,大大简化了游服查找战服过程;从维护的角度而言,大大简化了维护工作,维护者只需要关注当前游戏服务端mq是否被游服与战服依赖,不必维护游服内的战服列表。

进一步的,还包括:

所述游戏服务监听到所述一队列m消息后,依据其中的交互反馈信息创建与对应的战斗服务的对等链接关系。

由上述描述可知,发起交互请求的游戏服务只需监听自己创建的队列m便可获取接受交互请求的战斗服务的交互反馈信息,并据此创建二者的对等链接关系,实现二者的远程通信。二者通信关系的创建,从头至尾都不涉及二者的直面交互,因而能从架构上将二者彻底分离,简化交互流程。

进一步的,当所述交互请求为创建游戏房间请求时,所述任一战斗服务监听到所述一队列q消息后,从中提取所述唯一标识符,并依据处理所述一队列q消息得到的交互反馈信息向所述唯一标识符对应的所述队列m生产一队列m消息,具体为:

任一战斗服务监听到所述一队列q消息后,从所述队列q中取出所述一队列q消息;

所述任一战斗服务从所述一队列q消息中提取所述唯一标识符;

所述任一战斗服务处理所述一队列q消息对应的创建游戏房间请求,若处理结果对应分配游戏房间,则预分配游戏房间资源,并保持预设时长的超时等待;其中,所述游戏房间资源包括房间名、所述任一战斗服务的ip地址和端口号;

所述任一战斗服务向所述唯一标识符对应的所述队列m生产一队列m消息,并在所述一队列m消息中添加所述游戏房间资源。

由上述描述可知,对应创建游戏房间这一具体实例可知,游戏服务与战斗服务交互而创建游戏房间的过程中,完全不涉及二者的正面交互过程,游戏服务也不再需要寻找和确定可行的战斗服务,使得二者的交互方式更简洁、更直观;交互流程更简化;游戏服务的业务负担得到大大缓解。

进一步的,所述战斗服务和所述游戏服务的数量均为两个以上;所述mq服务上的队列m的数量为两个以上;所述队列q的数量为一个。

由上述描述可知,通过部署多套战斗服务,能确保任何一个队列q消息,战斗服务都有同等概率消费并据此创建链接关系,从而提高交互请求的处理效率,同时也更符合现有游戏服务端在实际运用场景的需求。

本发明提供的另一个技术方案为:

一种计算机可读存储介质,其上存储有计算机程序,所是程序在被处理器读取并执行后,能实现上述的解耦游戏服务和战斗服务的方法所包含的步骤。

对应本领域普通技术人员可以理解实现上述技术方案中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来实现的,所述的程序可存储于一计算机可读取的存储介质中,该程序在执行时,可包括如上述各方法的流程。通过该流程的实现,可实现下述有益效果:在创建链接过程,借助消息队列中间件(mq服务)将战斗服务和游戏服务彻底解耦。具体在游戏服务与战斗服务交互过程中,约定mq服务的队列q即作为游戏服务生产消息的队列,又作为战斗服务消费消息的队列;游戏服务依据接收到的交互请求向该队列生产消息,该消息中包含游戏服务消费的队列m;后续,战斗服务消费该消息时,将通过队列m返回反馈信息。由此,游戏服务只需经过一生产一消费,战斗服务经过一消费一生产的过程,便可创建二者的对等通信交互关系。本发明能够彻底的解除游戏服务和战斗服务在架构上的依赖关系,不仅简化了游戏服务查找战斗服务的过程,大大减轻双方的业务负担,同时提高交互效率;而且也大大简化了维护工作,只需维护游戏服务和战斗服务各自与mq的依赖关系,而不用再维护游戏服务内的战斗服务列表。

实施例一

请参照图2,本实施例提供一种基于mq解耦游戏服务和战斗服务创建房间的方法,能使得游戏服务与战斗服务交互创建房间的过程中在架构上彻底分离,从而简化交互过程,降低游戏服务的业务负担;同时也能简化维护工作;更能显著提高游戏房间的创建效率。

本实施例的方法涉及游戏服务、战斗服务以及mq服务。其中,所述战斗服务为战斗服务端的简称;游戏服务为游戏服务端的简称;mq服务为消息队列中间件的简称,mq服务作为消息中转服务,通常可通过部署rabbitmq服务器实现,mq服务具有解耦、提高峰值处理能力,送达和排序保证、消息缓冲等能力。默认上,只要有链接就保证至少有一个队列q存在。

下面,将对本实施例的方法所包括的流程进行说明:

s1:部署mq服务。

s2:部署战斗服务并启动,启动后自动与mq服务链接,并监听mq服务上原有的队列q,随时消费该队列上的消息。

s2:部署游戏服务并启动,启动后自动与mq服务链接;在mq服务上创建一个与该游戏服务具有对应关系的队列m,并监听该队列m,随时消费该队列m上的消息。

s3:当上述的游戏服务接收到对应战斗服务的交互请求时,在所述队列q上对应所述交互请求生产一队列q消息,并将所述队列m的唯一标识符添加至所述一队列q消息。

其中,若系统为多战服部署,则可以依据请求中是否存在对应指定的战斗服务确定具体哪一个战斗服务,若无指定,则可以是任意一个具有消息消费能力的战斗服务。

其中,交互请求对应本实施例指的是请求创建游戏房间,当然,也可能是其他请求,如请求查找游戏房间数最少的战斗服务等。

其中,所述队列m的唯一标识符,可以是队列m的id。在游戏服务所生产的队列q消息中加入自身创建的队列m的id,用于标识队列q消息的来源,同时作为队列q消息处理结果的返回路径标识。

具体而言,当游戏服务接收到用户发起的进入一战斗场景(游戏房间)的请求时,该请求对应创建一个游戏房间。则游戏服务将在队列q上生产一条含有其在s2步骤新建的队列m的id的队列q消息,该消息对应创建房间消息,该消息将由具有消费能力的战斗服务监听到后进行消费。通过在该消息中带上游戏服务创建并监听的队列m的id,以便后续消费该消息的战斗服务将反馈消息经队列m返回时,能够及时的监听到并消费。

s4:系统中任意一个战斗服务监听到步骤s3生产的队列q消息后,将会从队列q中提取该消息并对其进行处理。

具体的处理流程如下:

s41:从队列q消息中提取携带的唯一标识符,即队列m的id;

s42:对队列q消息对应的创建游戏房间请求进行处理,确定是否接收请求为其分配房间,并得到处理结果;若处理结果对应分配游戏房间,则预分配包括房间名(房间id)、本战斗服务ip地址(房间ip)、端口之类的游戏房间资源;

s43:向队列m生产一队列m消息,将处理结果(游戏房间资源或者是对应无法分配房间的信息)作为交互反馈信息加入到队列m消息中。

s5:监控着队列m的游戏服务在收到队列m消息后,提取其中的交互反馈信息,若为游戏房间资源,则依据其中的房间ip、端口和房间id创建对等房间链接(tcpconnector),进入战斗场景。

在一具体实施方式中,所述游戏服务的数量为多个,如图2所示,包括游服m、游服m1、游服m2等,对应创建队列m、队列m1、队列m2等,战服服务的数量也是多个,包括战斗服务1、战斗服务2、战斗服务3等。

简而言之,本实施例包括两个过程:

首先是游服创建一新的队列m,在队列q上生产一条含有队列mid的消息,同时战服消费这条消息;其次,战服消费之后,在队列m上生产一个响应消息,对应的游服消费它。

由于整个过程中,对游服而言就是一生产一消费的过程,并不用关注具体哪个战服处理生产的消息,即游服完全不必要知道当前战服有哪些,也不必知道哪些战服是可用的,这些特性都是由mq来保证。因此,本实施例实现了游服与战服的彻底分离,极大的简化了游戏服务查找战斗服务的过程,特别是大大简化了游戏服务的业务负担,不仅提升了房间的创建效率,而且能大大简化维护工程;同时,对应多战服同时监听队列q的部署,能确保队列q消息得到及时地处理,再次提高房间的创建效率。

实施例二

请参照图3,本实施例对应实施例一,提供一对应的系统架构,该系统应用于实施例一的解耦游戏服务和战斗服务的方法。

系统包括mq服务器、游戏服务端和战斗服务端;其中,游戏服务端包括第一消息处理模块和游戏房间peer;战斗服务端包括第二消息处理模块、房间分配模块和游戏房间。

其中,游戏服务端和战斗服务端分别与mq服务器链接;具体的,游戏服务端通过第一消息处理模块与mq服务器链接,战斗服务端通过第二消息处理模块与mq服务器链接;第一消息处理模块与游戏房间peer连接;第二消息处理模块、房间分配模块和游戏房间依次连接;游戏房间peer与游戏房间无线通信连接。

具体而言,所述第一消息处理模块,用于在mq服务器上创建一个队列m,并能消费队列m上的消息;还用于向mq服务器上的队列q生产创建房间消息,此消息带上队列m的id。

第二消息处理模块,用于消费mq服务器上队列q的消息,消费队列q上的消息后向消息来源的队列m生产一条消息,该消息将由第一消息处理模块消费。

游戏房间peer,实质上是一个tcpconnector,用于保持与游戏房间对等通信。

房间分配模块,收到第二消息处理模块路由过来的消息,做出是否分配房间处理,如果分配,则预分配房间资源,并保持一个超时等待。

游戏房间,是最终完成战斗服务的线程,与客户端交互,并与游戏房间peer通信。

本实施例借助mq服务器使得游戏服务端和战斗服务端解耦。在游服与战服分别增加两个模块,两个模块既作为消息的生产者又作为消息的消费者,约定一个队列q作为游服生产消息的队列又作为战服消费消息的队列。游服向mq上的队列q发送创建房间消息,此消息包含游服消费的队列m,后续战服会通过队列m返回消息。对应本实施例的方案,战斗服务端是多套部署,任何一个mq上队列q的消息,战服都有同等概率消费并能创建新房间,完成创建后向mq上的队列m发送战服的ip与端口。游服经过这一生产一消费过程后,拿到了一个ip与端口,创建对等实体(游戏房间peer)与远程一个战服通信。

实施例三

本实施例对应实施例一,提供一一种计算机可读存储介质,其上存储有计算机程序,所是程序在被处理器读取并执行后,能实现上述实施例一所述的解耦游戏服务和战斗服务的方法所包含的步骤,并能实现对应的功能。具体的步骤内容在此不进行复述,详细请参阅实施例一的记载。

其中,所述的存储介质可以是磁盘、光碟、只读存储记忆体(read-onlymemory,rom)或随机存储记忆体(randomaccessmemory,ram)等。

综上所述,本发明提供的解耦游戏服务和战斗服务的方法、存储介质,能够彻底的解除游戏服务和战斗服务在架构上的依赖关系,不仅简化了游戏服务查找战斗服务的过程,同时大大减轻游戏服务的业务负担,从而显著交互效率;而且也大大简化了维护工作,只需维护游戏服务和战斗服务各自与mq的依赖关系,而不用再维护游戏服务内的战斗服务列表。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。

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