一种游戏用户管理方法、游戏服务器及系统与流程

文档序号:11186113阅读:960来源:国知局
一种游戏用户管理方法、游戏服务器及系统与流程

本发明涉及互联网技术及游戏领域,特别涉及一种游戏用户管理方法、游戏服务器及系统。



背景技术:

随着互联网技术的不断发展,越来越多的游戏公司将目光从锁定在网游市场,开发一款热门的网络游戏成为了很多游戏公司的首要目标。而在搭建网络游戏系统时,通常是通过客户端-服务器的形式来实现的。当用户打开游戏客户端中安装的游戏软件进入游戏时,相当于登录了游戏服务器,此时游戏服务器即会为用户创建相关进程,在用户玩游戏的过程中,游戏客户端与游戏服务器之间持续存在交互行为,如发送请求、传递数据等,以保持数据的实时性,而这些与用户关联的交互行为会被上述进程加以记录。

就目前的游戏用户管理系统而言,当用户进入游戏并登录到对应的游戏服务器后,游戏服务器为用户创建一个进程,此后该进程直到用户退出游戏都一直存在,而一旦用户退出游戏则随即删除该进程。一般情况下,游戏客户端与游戏服务器之间的数据传送均是主动进行的,即游戏客户端可主动向游戏服务器发送数据,游戏服务器也可以非依游戏客户端请求,主动向游戏客户端推送消息,如活动通知、好友邮件等。然而,过多的数据频繁交互会给游戏服务器以及游戏客户端带来额外的负担,且当用户在非wi-fi环境下玩游戏时,网络中大量传输的数据量会造成数据流量的过多消耗。



技术实现要素:

为此,本发明提供一种游戏用户管理方案,以力图解决或者至少缓解上面存在的问题。

根据本发明的一个方面,提供一种游戏用户管理方法,适于在游戏用户管理系统所分配的游戏服务器中执行,游戏用户管理系统包括多个游戏服务器及数据库服务器,每个游戏服务器分别与多个游戏客户端及数据库服务器通信连接,数据库服务器中存储有多个用户初始信息,用户初始信息分别对应于不同的游戏用户,该方法包括如下步骤:接收游戏客户端发送的登录请求,登录请求包括登录验证信息;根据登录验证信息进行登录验证,若验证成功,则获取上次退出信息,根据上次退出信息判断上次退出游戏时是否存在异常情形;若上次退出游戏时不存在异常情形,则直接创建与游戏客户端对应的游戏用户关联的虚拟进程,虚拟进程中包括消息队列,消息队列适于存储游戏服务器生成的消息;从数据库服务器获取与游戏用户关联的用户初始信息作为用户当前信息,将用户当前信息发送至游戏客户端;接收并处理游戏客户端上报的操作数据,以生成对应的消息;根据消息更新用户当前信息,并将消息推送至消息队列;响应操作数据的上报,将消息队列中的所有消息发送给游戏客户端。

可选地,在根据本发明的游戏用户管理方法中,还包括:接收游戏客户端发送的退出请求,退出请求包括状态标识,状态标识用于标记本次退出游戏时是否存在异常情形将用户当前信息回写到数据库服务器,以更新对应的用户初始信息;若本次退出游戏时不存在异常情形,则直接删除虚拟进程;若本次退出游戏时存在异常情形,则将虚拟进程保留第一时间阈值后再进行删除。

可选地,在根据本发明的游戏用户管理方法中,登录验证信息包括登录请求时间和游戏用户标识,上次退出信息包括上次退出时间、上次退出游戏时的状态标识和上次登录游戏时连接的游戏服务器对应的服务器标识,该方法还包括:若上次退出游戏时的状态标识表明存在异常情形,则判断登录请求时间与上次退出时间的时间间隔是否大于第一时间阈值;若时间间隔不大于第一时间阈值,则通过服务器标识查找到上次登录游戏时分配的游戏服务器,获取该游戏服务器中与游戏用户标识关联的最新的用户当前信息,删除该游戏服务器保留的与游戏用户标识对应的虚拟进程,并基于该用户当前信息在当前分配的游戏服务器中重新创建关联的虚拟进程。

可选地,在根据本发明的游戏用户管理方法中,还包括:若时间间隔大于第一时间阈值,则直接创建与游戏客户端对应的游戏用户关联的虚拟进程。

可选地,在根据本发明的游戏用户管理方法中,游戏服务器中存储有游戏配置数据,接收并处理游戏客户端上报的操作数据,以生成对应的消息的步骤包括:接收游戏客户端上报的操作数据;根据游戏配置数据和用户当前信息,对操作数据进行校验;若校验成功,则对操作数据进行处理,以生成对应的消息。

可选地,在根据本发明的游戏用户管理方法中,操作数据包括道具使用信息、通关耗时、伤害量、生命值、攻击强度、金币数量和障碍物信息中至少一种。

可选地,在根据本发明的游戏用户管理方法中,操作数据包括道具使用信息,道具使用信息包括道具标识和与其关联的已使用道具数量,用户当前信息包括道具标识和与其对应的剩余道具数量,游戏配置数据包括与道具标识关联的道具使用数量上限值,根据游戏配置数据和用户当前信息,对操作数据进行校验的步骤包括:对每一个道具,根据其道具标识获取该道具的已使用道具数量、剩余道具数量和道具使用数量上限值;判断已使用道具数量是否满足小于道具使用数量上限值、且小于剩余道具数量的条件;若满足条件,则判断校验成功,否则判断校验失败。

可选地,在根据本发明的游戏用户管理方法中,对操作数据进行处理,以生成对应的消息的步骤包括:对每一个道具,计算该道具的剩余道具数量与已使用道具数量的差值;将剩余道具数量的值更新为该差值以作为对应的消息。

可选地,在根据本发明的游戏用户管理方法中,还包括:响应游戏客户端发送的心跳信息,将消息队列中的所有消息发送至游戏客户端。

根据本发明的又一个方面,提供一种游戏服务器,适于响应游戏用户管理系统的分配与对应的游戏客户端进行数据交互,游戏用户管理系统包括多个游戏服务器及数据库服务器,每个游戏服务器分别与多个游戏客户端及数据库服务器通信连接,数据库服务器中存储有多个用户初始信息,用户初始信息分别对应于不同的游戏用户,游戏服务器包括接收模块、验证模块、判断模块、进程管理模块、获取模块、生成模块、更新模块和相应模块。其中,接收模块适于接收游戏客户端发送的登录请求,登录请求包括登录验证信息;验证模块适于根据登录验证信息进行登录验证;判断模块适于当验证成功时,获取上次退出信息,根据上次退出信息判断上次退出游戏时是否存在异常情形;进程管理模块适于当上次退出游戏时不存在异常情形时,直接创建与游戏客户端对应的游戏用户关联的虚拟进程,虚拟进程中包括消息队列,消息队列适于存储游戏服务器生成的消息;获取模块适于从数据库服务器获取与游戏用户关联的用户初始信息作为用户当前信息,将用户当前信息发送至游戏客户端;生成模块适于接收并处理游戏客户端上报的操作数据,以生成对应的消息;更新模块适于根据消息更新用户当前信息,并将消息推送至消息队列;响应模块适于响应操作数据的上报,将消息队列中的所有消息发送给游戏客户端。

可选地,在根据本发明的游戏服务器中,接收模块还适于接收游戏客户端发送的退出请求,退出请求包括状态标识,状态标识用于标记本次退出游戏时是否存在异常情形;进程管理模块还适于,将用户当前信息回写到数据库服务器,以更新对应的用户初始信息当本次退出游戏时不存在异常情形时,直接删除虚拟进程,当本次退出游戏时存在异常情形时,将虚拟进程保留第一时间阈值后再进行删除。

可选地,在根据本发明的游戏服务器中,登录验证信息包括登录请求时间和游戏用户标识,上次退出信息包括上次退出时间、上次退出游戏时的状态标识和上次登录游戏时连接的游戏服务器对应的服务器标识,判断模块还适于当上次退出游戏时的状态标识表明存在异常情形时,判断登录请求时间与上次退出时间的时间间隔是否大于第一时间阈值;进程管理模块还适于当时间间隔不大于第一时间阈值时,通过服务器标识查找到上次登录游戏时分配的游戏服务器,获取该游戏服务器中与游戏用户标识关联的最新的用户当前信息,删除该游戏服务器保留的与游戏用户标识对应的虚拟进程,并基于该用户当前信息在当前分配的游戏服务器中重新创建关联的虚拟进程。

可选地,在根据本发明的游戏服务器中,进程管理模块还适于:当时间间隔大于第一时间阈值时,直接创建与游戏客户端对应的游戏用户关联的虚拟进程。

可选地,在根据本发明的游戏服务器中,游戏服务器中存储有游戏配置数据,生成模块进一步适于:接收游戏客户端上报的操作数据;根据游戏配置数据和用户当前信息,对操作数据进行校验;当校验成功时,对操作数据进行处理,以生成对应的消息。

可选地,在根据本发明的游戏服务器中,操作数据包括道具使用信息、通关耗时、伤害量、生命值、攻击强度、金币数量和障碍物信息中至少一种。

可选地,在根据本发明的游戏服务器中,操作数据包括道具使用信息,道具使用信息包括道具标识和与其关联的已使用道具数量,用户当前信息包括道具标识和与其对应的剩余道具数量,游戏配置数据包括与道具标识关联的道具使用数量上限值,生成模块进一步适于:对每一个道具,根据其道具标识获取该道具的已使用道具数量、剩余道具数量和道具使用数量上限值;判断已使用道具数量是否满足小于道具使用数量上限值、且小于剩余道具数量的条件;当满足条件时,判断校验成功,否则判断校验失败。

可选地,在根据本发明的游戏服务器中,生成模块进一步适于:对每一个道具,计算该道具的剩余道具数量与已使用道具数量的差值;将剩余道具数量的值更新为该差值以作为对应的消息。

可选地,在根据本发明的游戏服务器中,响应模块还适于:响应游戏客户端发送的心跳信息,将消息队列中的所有消息发送至游戏客户端。

根据本发明的又一个方面,还提供一种游戏用户管理系统,包括根据本发明的多个游戏服务器及数据库服务器。

根据本发明的游戏用户管理的技术方案,当游戏用户在游戏客户端登录游戏时,游戏用户系统向该游戏用户分配的游戏服务器接收游戏客户端发送的登录请求,并创建与该游戏用户关联的虚拟进程,虚拟进程中包括消息队列,随后从数据库服务器获取与游戏用户关联的用户初始信息作为用户当前信息,将用户当前信息发送至游戏客户端,在游戏用户保持游戏状态的过程中,游戏服务器接收并处理游戏客户端上报的操作数据,以生成对应的消息,根据消息更新用户当前信息,并将消息推送至消息队列,响应操作数据的上报,将消息队列中的所有消息发送给游戏客户端。在上述技术方案中,在创建虚拟进程前,会先对登录请求中的登录验证信息进行验证,若验证成功则判断该游戏用户上次退出游戏时是否存在异常情形,当不存在异常情形时才直接创建与该游戏用户关联的虚拟进程,否则先根据异常情形进行相应的处理,比如保存最新的用户当前信息,再基于该用户当前信息创建虚拟进程,从而避免如掉线、卡机等异常情形导致游戏用户意外退出游戏而丢失游戏进度的问题,大幅度提升了用户体验。同时,在对操作数据进行处理时,会根据游戏配置数据和用户当前信息来校验操作数据,若校验成功才会执行下一步处理以生成对应的消息,降低了游戏作弊的可能性,打击了外挂行为。由于只有当游戏客户端向游戏服务器上报操作数据时,游戏服务器才进行响应将消息队列中的所有消息发送给游戏客户端,使得两者的数据交互行为大量减少,降低网络连接中传输的数据量。此外,为防止游戏客户端长时间不上报操作数据的问题,在游戏客户端设置一定频率的心跳信息来触发游戏服务器自动下发消息,达到获取推送消息的目的。

附图说明

为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。

图1示出了根据本发明的一个实施例的游戏用户管理系统100的示意图;

图2示出了根据本发明一个实施例的游戏用户管理方法200的流程图;以及

图3示出了根据本发明一个实施例的游戏服务器300的示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

图1示出了根据本发明一个实施例的游戏用户管理系统100的示意图。如图1所示,游戏用户管理系统100包括游戏服务器300、游戏服务器400和数据库服务器500,游戏服务器300和游戏服务器400均与数据库服务器500通信连接,数据库服务器500中存储有多个用户初始信息,每个用户初始信息分别对应于不同的游戏用户,需要说明的是游戏服务器和数据库服务器的数量并无限制。在图1中,与游戏服务器300通信连接的还有游戏客户端610和游戏客户端620,与游戏服务器400通信连接的还有游戏客户端630和游戏客户端640,游戏客户端610~640可实现为移动终端,如智能手机、平板电脑等,也可实现为计算设备,如pc机等,但均不限于此,数量上也未作任何限制。

根据本发明的一个实施例,游戏服务器300通过通信网络分别与数据库服务器500、游戏客户端610和游戏客户端620交换数据信息,而游戏服务器400则是通过通信网络分别与数据库服务器500、游戏客户端630和游戏客户端640交换数据信息,以下将以游戏服务器300与数据库服务器500及游戏客户端610之间的交互为例进行说明。具体来说,当游戏用户登录安装于游戏客户端610中的游戏应用时,游戏用户管理系统100会向该游戏用户分配一个游戏服务器,即如图1所示的游戏服务器300,此时游戏服务器300接收游戏客户端610发送的登录请求,根据该登录请求来创建与游戏客户端610对应的该游戏用户关联的虚拟进程,虚拟进程中包括消息队列,游戏服务器300从数据库服务器500获取与该游戏用户关联的用户初始信息作为用户当前信息,将该用户当前信息发送至游戏客户端610。游戏客户端610接收到用户当前信息后,将游戏中的用户数据进行初始化更新,并开始收集游戏用户的操作行为所对应的操作数据,将操作数据上报至游戏服务器300。游戏服务器300接收并处理游戏客户端610上报的操作数据,以生成对应的消息,根据消息更新用户当前信息,并将消息推送至消息队列,再响应操作数据的上报,将消息队列中的所有消息发送给游戏客户端610。

图2示出了根据本发明一个实施例的游戏用户管理方法200的流程图。游戏用户管理方法200适于在游戏服务器(例如图1所示的游戏服务器300)中执行。

如图2所示,方法200始于步骤s20。在步骤s210中,接收游戏客户端610发送的登录请求,登录请求包括登录验证信息。游戏服务器300在接收到上述登录请求后,执行步骤s220,根据登录验证信息进行登录验证,若验证成功,则获取上次退出信息,根据上次退出信息判断上次退出游戏时是否存在异常情形。其中,登录验证信息包括登录请求时间和游戏用户标识,上次退出信息包括上次退出时间、上次退出游戏时的状态标识和上次登录游戏时连接的游戏服务器对应的服务器标识。上次退出游戏时的状态标识适于表明是否游戏用户在上次退出游戏时,其退出状态是正常退出还是存在异常情形,如果该状态标识为true,则说明游戏用户是正常退出游戏,如果该状态标识为false,则说明游戏用户退出游戏存在异常情形。需要说明的是,上次退出信息是与游戏客户端610中当前登录的游戏用户关联的,其可以是由游戏用户上次退出游戏时所连接的服务器保存,也可以由数据库服务器500保存,当然,还可以由游戏客户端610本地保存,若由游戏客户端610保存,则登录请求包括登录验证信息和上次退出信息。

根据本发明的一个实施例,登录请求时间为2017年3月22日17时35分22秒,游戏用户标识为user1,上次退出时间为2017年3月21日11时13分39秒,上次退出游戏时的状态标识为true,上次登录游戏时连接的游戏服务器对应的服务器标识为server1。由状态标识为true可知,游戏用户上次退出游戏时是正常退出,不存在异常情形。

若上次退出游戏时不存在异常情形,则进入步骤s230,直接创建与游戏客户端610对应的游戏用户关联的虚拟进程,虚拟进程中包括消息队列,消息队列适于存储游戏服务器300生成的消息。根据本发明的一个实施例,由于上次退出游戏时的状态标识为true,则游戏服务器300直接创建与游戏客户端610对应的游戏用户关联的虚拟进程pro1,虚拟进程pro1中包括消息队列,消息队列适于存储游戏服务器300生成的消息。在该实施方式中,虚拟进程pro1是erlang虚拟机级别的,可以通过spawn函数创建,创建时间是微秒级别,初始占用内存2kb左右。实际上,对每一个游戏用户而言,在其登录游戏并通过登录验证后,会根据相应的处理来为其创建一个包含该游戏用户所有操作行为的状态机虚拟进程,用于处理其所有操作行为,比如签到、战斗等。此虚拟进程的生命周期一般是从游戏用户登录游戏到退出游戏,在游戏用户的游戏过程中不断接收由游戏客户端发来的操作数据,并进行处理以生成对应的消息,实时进行状态的切换,返回消息给游戏客户端,可以说游戏客户端所展示的内容就是游戏用户的虚拟进程中数据和状态的反射。以上创建虚拟进程的相关代码如下所示:

handle({#user_login_c2s{openid=openid,openkey=openkey,serverid=serverid,mac=macaddress,

pf=pf,audlt=isaudlt,client_version=clientversion,hardware=hardware,

telecom=telecom,network=network,regchannel=regchannel,

pay_pf=paypf,pay_pfkey=paypfkey,pay_token=paytoken,name=name,

activation_code=activationcode,icon_url=iconurl,login_source=loginsource,

gender=gender,refresh_token=refreshtoken},ipstr,cookievalue})->

player_login_op:http_proc_user_login_c2s({openid,openkey,serverid,macaddress,pf,isaudlt,clientversion,

hardware,telecom,network,regchannel,paypf,paypfkey,paytoken,

name,activationcode,iconurl,loginsource,gender,refreshtoken},ipstr,cookievalue);

childspec={roleid,{role_processor,start_link,[roledb,roleid]},temporary,

2000,worker,[role_processor]},supervisor:start_child({?module,node},childspec).

以上对上次退出游戏时不存在异常情形而创建虚拟进程的情况进行了说明,那么若上次退出游戏时的状态标识表明存在异常情形,则关于创建虚拟进程的过程是有所不同的。根据本发明的又一个实施例,若上次退出游戏时的状态标识表明存在异常情形,则判断登录请求时间与上次退出时间的时间间隔是否大于第一时间阈值,若时间间隔不大于第一时间阈值,则通过服务器标识查找到上次登录游戏时分配的游戏服务器,获取该游戏服务器中与游戏用户标识关联的最新的用户当前信息,删除该游戏服务器保留的与游戏用户标识对应的虚拟进程,并基于该用户当前信息在当前分配的游戏服务器中重新创建关联的虚拟进程,若时间间隔大于第一时间阈值,则直接创建与游戏客户端对应的游戏用户关联的虚拟进程。

在该实施方式中,登录请求时间为2017年4月12日9时30分12秒,游戏用户标识为user1,上次退出时间为2017年4月12日9时28分55秒,上次退出游戏时的状态标识为false,上次登录游戏时连接的游戏服务器对应的服务器标识为server2,第一时间阈值优选为5分钟。由状态标识为false可知,游戏用户上次退出游戏时是非正常退出,存在异常情形,则判断登录请求时间与上次退出时间的时间间隔是否大于第一时间阈值。此时,该时间间隔为1分17秒,不大于第一时间阈值,则通过服务器标识server2查找到上次登录游戏时分配的游戏服务器为游戏服务器400,获取游戏服务器400中与游戏用户标识user2关联的最新的用户当前信息,删除游戏服务器400保留的与游戏用户标识user2对应的虚拟进程pro0,并基于该用户当前信息在当前分配的游戏服务器300中重新创建关联的虚拟进程pro2。

接下来,执行步骤s240,从数据库服务器500获取与游戏用户关联的用户初始信息作为用户当前信息,将用户当前信息发送至游戏客户端610。根据本发明的一个实施例,用户初始信息一般包括游戏用户的基础信息和游戏系统信息,游戏用户的基础信息是可以反映出游戏用户自身水平的数据,包括如在游戏中的用户信息界面上显示的内容,比如游戏用户名称、头像、性别、金币数量、道具数量、等级和经验值等,而游戏系统信息则是与游戏系统自身相关的如游戏签到系统数据、游戏好友系统数据等数据。从数据库服务器500中获取到与游戏用户标识为user1的游戏用户关联的用户初始信息,将该用户初始信息作为用户当前信息并发送至游戏客户端610,以便游戏客户端610根据该用户当前信息更新本地数据并向游戏用户展示。

在步骤s250中,接收并处理游戏客户端610上报的操作数据,以生成对应的消息。根据本发明的一个实施例,游戏服务器中存储有游戏配置数据,消息的生成可通过以下方式来实现。首先,接收游戏客户端上报的操作数据,操作数据包括道具使用信息、通关耗时、伤害量、生命值、攻击强度、金币数量和障碍物信息中至少一种,然后,根据游戏配置数据和用户当前信息,对操作数据进行校验,若校验成功,则对操作数据进行处理,以生成对应的消息。在该实施方式中,游戏配置数据是预先配置好的、可用于对操作数据中具有数值上限的数据进行限制的数据,比如操作数据包括道具使用信息,道具使用信息包括道具标识和与其关联的已使用道具数量,则对应的游戏配置数据包括与道具标识关联的道具使用数量上限值,此时用户当前信息包括道具标识和与其对应的剩余道具数量。

进而,在上述情况下,可通过下列方式对操作数据进行校验。对每一个道具,根据其道具标识获取该道具的已使用道具数量、剩余道具数量和道具使用数量上限值,判断已使用道具数量是否满足小于道具使用数量上限值、且小于剩余道具数量的条件,若满足该条件,则判断校验成功,否则判断校验失败。在该实施方式中,共计有3种不同的道具,道具标识依次为d1、d2和d3,将各道具分别记为道具d1、道具d2和道具d3,道具d1的已使用道具数量为2,剩余道具数量为3,道具使用数量上限值为3,道具d2的已使用道具数量为0,剩余道具数量为1,道具使用数量上限值为1,道具d3的已使用道具数量为1,剩余道具数量为4,道具使用数量上限值为2。对道具d1、d2和d3而言,其已使用道具数量均满足小于道具使用数量上限值、且小于剩余道具数量的条件,因此判断校验成功。

在对游戏客户端610上报的操作数据完成校验后,继续对其进行处理以生成对应的消息。根据上述实施例,对每一个道具,计算该道具的剩余道具数量与已使用道具数量的差值,将剩余道具数量的值更新为该差值以作为对应的消息。那么,道具d1的剩余道具数量的值应更新为3-2=1,道具d2的剩余道具数量的值应更新为1-0=1,道具d3的剩余道具数量的值应更新为4-1=3,将各道具的新的剩余道具数量与道具标识关联起来以生成与道具相关的消息。

需要说明的是,由于不同的游戏系统的玩法设置和运行规则均有所不同,则在上述对操作数据进行校验的过程中,校验规则的制定也是千差万别的,不仅与游戏系统自身及上报的具体的操作数据相关,还会涉及到各方面因素的考虑来进行校验规则的更改,在本发明中对于校验规则的设定不进行限制,根据不同的游戏系统进行适应性调整即可。此外,对于虚拟进程而言,当其进入游戏状态后,自身也会相应运转,如果触发了一些时效性的功能,比如游戏活动刷新、体力回复等,虚拟进程还会自行产生消息来推送到消息队列。

在消息生成后,执行步骤s260,根据消息更新用户当前信息,并将消息推送至消息队列。根据本发明的一个实施例,生成的消息是与道具相关的,具体为更新剩余道具数量的消息,则对于游戏用户标识为user1的游戏用户的用户当前信息,其中道具d1的剩余道具数量的值更新为1,道具d2的剩余道具数量的值更新为1,道具d3的剩余道具数量的值更新为3,至此完成了用户当前信息的更新,随后将上述消息推送至消息队列。

接下来,进入步骤s270,响应操作数据的上报,将消息队列中的所有消息发送给游戏客户端610。根据本发明的一个实施例,将消息队列中包括以上与道具相关的消息在内的所有消息,均发送给游戏客户端610,以便其更新本地数据。考虑到游戏客户端610可能会存在长时间不上报操作数据的情况,为避免数据更新不及时,根据本发明的一个实施例,在游戏客户端610中设置预定时间间隔的心跳来触发游戏服务器300下发消息,则游戏客户端300响应游戏客户端610发送的心跳信息,将消息队列中的所有消息发送至游戏客户端610。在该实施方式中,预定时间间隔优选为180秒。消息推送过程的相关代码如下所示:

//push消息

push_msg(pushmsg)->

put(?dict_push_msg_list,[pushmsg|get(?dict_push_msg_list)]).

//get消息

get_push_msg_list()->

msglist=get(?dict_push_msg_list),

reinit(),

lists:reverse(msglist).

//发送组合消息

encode_msg_list(msglist)->

lists:foldl(fun(msg,acc)->

bsize=size(msg),

<<acc/binary,bsize:16/unsigned,msg/binary>>

end,<<>>,msglist).

当游戏用户退出当前游戏时,游戏客户端610会向游戏服务器300发送退出请求,此时游戏服务器300接收游戏客户端610发送的退出请求,退出请求包括状态标识,状态标识用于标记本次退出游戏时是否存在异常情形,并将用户当前信息回写到数据库服务器500,以更新对应的用户初始信息。若本次退出游戏时不存在异常情形,则直接删除虚拟进程,若本次退出游戏时存在异常情形,则将虚拟进程保留第一时间阈值后再进行删除。在游戏用户退出游戏时,通过状态标识来标记是否异常退出,对于异常退出的游戏用户,保留其关联的虚拟进程,以便游戏用户在第一时间阈值内再次登录游戏时,不会失去原本的游戏数据。

图3示出了本发明一个实施例的游戏服务器300的示意图。如图3所示,游戏服务器300包括接收模块310、验证模块320、判断模块330、进程管理模块340、获取模块350、生成模块360、更新模块370和响应模块380。

接收模块310适于接收游戏客户端610发送的登录请求,登录请求包括登录验证信息。接收模块310还适于接收游戏客户端610发送的退出请求,退出请求包括状态标识,状态标识用于标记本次退出游戏时是否存在异常情形。

验证模块320与接收模块310相连,适于根据登录验证信息进行登录验证。

判断模块330分别与接收模块310和验证模块320相连,适于当验证成功时,获取上次退出信息,根据上次退出信息判断上次退出游戏时是否存在异常情形。登录验证信息包括登录请求时间和游戏用户标识,上次退出信息包括上次退出时间、上次退出游戏时的状态标识和上次登录游戏时连接的游戏服务器对应的服务器标识,判断模块330还适于当上次退出游戏时的状态标识表明存在异常情形时,判断登录请求时间与上次退出时间的时间间隔是否大于第一时间阈值。

进程管理模块340与判断模块330相连,适于当上次退出游戏时不存在异常情形时,直接创建与游戏客户端610对应的游戏用户关联的虚拟进程,虚拟进程中包括消息队列,消息队列适于存储游戏服务器300生成的消息。进程管理模块340还适于将用户当前信息回写到数据库服务器500,以更新对应的用户初始信息,当本次退出游戏时不存在异常情形时,直接删除虚拟进程,当本次退出游戏时存在异常情形时,将虚拟进程保留第一时间阈值后再进行删除。登录验证信息包括登录请求时间和游戏用户标识,上次退出信息包括上次退出时间、上次退出游戏时的状态标识和上次登录游戏时连接的游戏服务器对应的服务器标识,进程管理模块340还适于当时间间隔不大于第一时间阈值时,通过服务器标识查找到上次登录游戏时分配的游戏服务器,获取该游戏服务器中与游戏用户标识关联的最新的用户当前信息,删除该游戏服务器保留的与游戏用户标识对应的虚拟进程,并基于该用户当前信息在当前分配的游戏服务器300中重新创建关联的虚拟进程。进程管理模块340还适于当时间间隔大于第一时间阈值时,直接创建与游戏客户端610对应的游戏用户关联的虚拟进程。

获取模块350与进程管理模块340相连,适于从数据库服务器500获取与游戏用户关联的用户初始信息作为用户当前信息,将用户当前信息发送至游戏客户端610。

生成模块360与进程管理模块340相连,适于接收并处理游戏客户端610上报的操作数据,以生成对应的消息。游戏服务器300中存储有游戏配置数据,生成模块360进一步适于接收游戏客户端610上报的操作数据;根据游戏配置数据和用户当前信息,对操作数据进行校验;当校验成功时,对操作数据进行处理,以生成对应的消息。其中,操作数据包括道具使用信息、通关耗时、伤害量、生命值、攻击强度、金币数量和障碍物信息中至少一种。操作数据包括道具使用信息,道具使用信息包括道具标识和与其关联的已使用道具数量,用户当前信息包括道具标识和与其对应的剩余道具数量,游戏配置数据包括与道具标识关联的道具使用数量上限值,生成模块360进一步适于对每一个道具,根据其道具标识获取该道具的已使用道具数量、剩余道具数量和道具使用数量上限值;判断已使用道具数量是否满足小于道具使用数量上限值、且小于剩余道具数量的条件;当满足条件时,判断校验成功,否则判断校验失败。生成模块360进一步适于对每一个道具,计算该道具的剩余道具数量与已使用道具数量的差值;将剩余道具数量的值更新为该差值以作为对应的消息。

更新模块370与生成模块360相连,适于根据消息更新用户当前信息,并将消息推送至消息队列。

响应模块380与更新模块370相连,适于响应操作数据的上报,将消息队列中的所有消息发送给游戏客户端610。响应模块380还适于响应游戏客户端610发送的心跳信息,将消息队列中的所有消息发送至游戏客户端610。

关于游戏用户管理的具体步骤以及实施例,在基于图2的描述中已经详细公开,此处不再赘述。

现有的游戏用户管理方案中,游戏服务器为游戏用户创建的游戏进程在用户退出游戏时即刻删除,且游戏客户端与游戏服务器之间的数据传送均是主动进行的,过多的数据频繁交互会给游戏服务器以及游戏客户端带来额外的负担,且当用户在非wi-fi环境下玩游戏时,网络中大量传输的数据量会造成数据流量的过多消耗。根据本发明实施例的游戏用户管理的技术方案,当游戏用户在游戏客户端登录游戏时,游戏用户系统向该游戏用户分配的游戏服务器接收游戏客户端发送的登录请求,并创建与该游戏用户关联的虚拟进程,虚拟进程中包括消息队列,随后从数据库服务器获取与游戏用户关联的用户初始信息作为用户当前信息,将用户当前信息发送至游戏客户端,在游戏用户保持游戏状态的过程中,游戏服务器接收并处理游戏客户端上报的操作数据,以生成对应的消息,根据消息更新用户当前信息,并将消息推送至消息队列,响应操作数据的上报,将消息队列中的所有消息发送给游戏客户端。在上述技术方案中,在创建虚拟进程前,会先对登录请求中的登录验证信息进行验证,若验证成功则判断该游戏用户上次退出游戏时是否存在异常情形,当不存在异常情形时才直接创建与该游戏用户关联的虚拟进程,否则先根据异常情形进行相应的处理,比如保存最新的用户当前信息,再基于该用户当前信息创建虚拟进程,从而避免如掉线、卡机等异常情形导致游戏用户意外退出游戏而丢失游戏进度的问题,大幅度提升了用户体验。同时,在对操作数据进行处理时,会根据游戏配置数据和用户当前信息来校验操作数据,若校验成功才会执行下一步处理以生成对应的消息,降低了游戏作弊的可能性,打击了外挂行为。由于只有当游戏客户端向游戏服务器上报操作数据时,游戏服务器才进行响应将消息队列中的所有消息发送给游戏客户端,使得两者的数据交互行为大量减少,降低网络连接中传输的数据量。此外,为防止游戏客户端长时间不上报操作数据的问题,在游戏客户端设置一定频率的心跳信息来触发游戏服务器自动下发消息,达到获取推送消息的目的。

a9.如a1-8中任一项所述的方法,还包括:

响应所述游戏客户端发送的心跳信息,将所述消息队列中的所有消息发送至所述游戏客户端。

b11.如b10所述的游戏服务器,其中:

所述接收模块还适于,接收游戏客户端发送的退出请求,所述退出请求包括状态标识,所述状态标识用于标记本次退出游戏时是否存在异常情形;

所述进程管理模块还适于,将所述用户当前信息回写到数据库服务器,以更新对应的用户初始信息,当本次退出游戏时不存在异常情形时,直接删除所述虚拟进程,当本次退出游戏时存在异常情形时,将所述虚拟进程保留第一时间阈值后再进行删除。

b12.如b10或11所述的游戏服务器,登录验证信息包括登录请求时间和游戏用户标识,上次退出信息包括上次退出时间、上次退出游戏时的状态标识和上次登录游戏时连接的游戏服务器对应的服务器标识,其中:

所述判断模块还适于,当上次退出游戏时的状态标识表明存在异常情形时,判断所述登录请求时间与所述上次退出时间的时间间隔是否大于第一时间阈值;

所述进程管理模块还适于,当所述时间间隔不大于第一时间阈值时,通过所述服务器标识查找到上次登录游戏时分配的游戏服务器,获取该游戏服务器中与所述游戏用户标识关联的最新的用户当前信息,删除该游戏服务器保留的与所述游戏用户标识对应的虚拟进程,并基于该用户当前信息在当前分配的游戏服务器中重新创建关联的虚拟进程。

b13.如b12所述的游戏服务器,所述进程管理模块还适于:

当所述时间间隔大于第一时间阈值时,直接创建与所述游戏客户端对应的游戏用户关联的虚拟进程。

b14.如b10-13中任一项所述的游戏服务器,所述游戏服务器中存储有游戏配置数据,所述生成模块进一步适于:

接收所述游戏客户端上报的操作数据;

根据所述游戏配置数据和所述用户当前信息,对所述操作数据进行校验;

当校验成功时,对所述操作数据进行处理,以生成对应的消息。

b15.如b10-14中任一项所述的游戏服务器,所述操作数据包括道具使用信息、通关耗时、伤害量、生命值、攻击强度、金币数量和障碍物信息中至少一种。

b16.如b10-15中任一项所述的游戏服务器,所述操作数据包括道具使用信息,所述道具使用信息包括道具标识和与其关联的已使用道具数量,所述用户当前信息包括道具标识和与其对应的剩余道具数量,所述游戏配置数据包括与道具标识关联的道具使用数量上限值,所述生成模块进一步适于:

对每一个道具,根据其道具标识获取该道具的已使用道具数量、剩余道具数量和道具使用数量上限值;

判断所述已使用道具数量是否满足小于所述道具使用数量上限值、且小于所述剩余道具数量的条件;

当满足所述条件时,判断校验成功,否则判断校验失败。

b17.如b16所述的游戏服务器,所述生成模块进一步适于:

对每一个道具,计算该道具的剩余道具数量与已使用道具数量的差值;

将所述剩余道具数量的值更新为该差值以作为对应的消息。

b18.如b10-17中任一项所述的游戏服务器,所述响应模块还适于:

响应所述游戏客户端发送的心跳信息,将所述消息队列中的所有消息发送至所述游戏客户端。在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。

这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如软盘、cd-rom、硬盘驱动器或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。

在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的游戏用户管理方法。

以示例而非限制的方式,计算机可读介质包括计算机存储介质和通信介质。计算机可读介质包括计算机存储介质和通信介质。计算机存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在计算机可读介质的范围之内。

如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。

尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。

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