游戏登陆流程

当公司有很多游戏的时候,那么公司往往会有一个统一的账号管理平台,就就像盛大通行证、网易通行证,战网平台,这些平台统一管理游戏的账号数据。

打个比方,现在我们玩星辰变,那么玩家登陆游戏的时候有两个过程,一是登陆游戏账号,取得我们需要登陆的游戏区的网关,也就是之前说平台服务器那里,然后是进入到游戏角色选择界面,登陆到星辰变游戏中。第一步已经在《数据/平台服务器》说过了。现在说第二阶段。

在叙述这个过程中,我们需要知道玩家登陆游戏时“卡号”的现象,也就是玩家某此下线,没有设置玩家下线标志或是清除某些上线数据,导致玩家在下一次登陆时,造成无法登陆的现象,我们在程序设计,考虑到这一步就可以了。

我们已经进入到星辰变的游戏选择界面,

1. 我们点击进入游戏,那么客户端发送玩家登陆游戏的数据给网关,网关根据之前的令牌,验证是否可以通过

2. 网关发送消息到会话,会话的全区玩家管理器中添加新的玩家,然后通知super

3. Super添加玩家的信息,(主要是玩家的各个服务器id,),然后通知数据服务器;

4. 数据服务器通过这个账号id去数据库读取这个玩家的数据,如果有,读取玩家数据,

数据服务器将玩家的基本游戏数据发给客户端,并且通知该玩家的场景服务器,有玩家上线

5. 场景服务器上解析来自数据服务器的数据,添加一个新的玩家,做上线处理,并且通知会话服务器,玩家登陆到某个场景了

6. 会话服务器知道该玩家登陆到某个场景了,做上线处理,主要是社会关系之类的

从网关之后的每一步,都会发送一个消息到网关服务器,告诉网关服务器该玩家有没有登陆成功,如果没有成功,需要清除玩家这一次的登陆信息,否则下次登陆时,就卡号了,玩家下线时,必须清除玩家在每个服务器上的在线情况,否则下次就无法登陆了。总之,我们再设计时,考虑好这些数据的处理就可以了。这就是一个玩家的登陆流程了,当中的异常处理就自己去处理了。

我们在做功能时,在几个服务器间有数据交互时, 一定要避免流程重入,在一次数据交互没有全部完成时,不能让流程从中间切入,或流程重复发起,只要是在服务器上做的验证处理,就一定要想周全,这样也就能最大程度的避免外挂,就算在消息中添加冗余数据也是可以的。
Para obter mais informações sobre otimizações de compiladores, consulte Aviso sobre otimizações.