角色名字所有大区唯一的实现策略

有的公司可能有一个专门角色名字唯一性判断的服务器,名字服务器。这个服务器的目标保证一个大区或者所有大区的名字唯一。所有大区名字唯一有一个好处是,合服的时候不会出现角色名冲突。一个大区唯一的实现策略很直接很容易。这边文章我们尝试讨论所有大区名字唯一的实现策略。

先说一个直接的策略。

不同大区的所有的游戏服务器都和一个名字服务器进行数据交互,客户端把创建角色请求交给游戏服务器,游戏服务器去名字服务器上判断一下这个名字是否已存在。

这个策略的缺点很多,比如服务器直接耦合增加;如果大区的游戏服务器和名字服务器在不同的IDC而且之间没有专线,效率上一般也不能满足运营要求。

所以大部分的项目如果用这类策略的话,一般是一个大区配一个名字服务器,或者把这个这个名字服务器的功能作为一个模块放到一个大区的全局服务器中。

上面那个策略其实没什么实际意义,下面我们说说我们的重点策略。

这个策略和Kerberos有关,而且Kerberos是重点。Kerberos是一种认证鉴权机制,不了解的去搜搜,这里就不说了。

流程大体是这样:

前提条件:名字服务器&游戏服务器之间先约定一个Key。

1. 客户端通过认证鉴权服务器拿到一个名字服务器的票据(ticket)&游戏服务器的票据,这两个票据是客户端和名字服务器,游戏服务器交互的凭证;

2. 客户端发要创建的角色名(有加密的)给名字服务器,角色名合法,名字服务器用某种加密算法用上面的Key生成一个角色名加密串,返回给客户端;

3. 客户端把上面的一堆内容+其他安全相关的内容发给游戏服务器,游戏服务器就知道角色名是否合法了。

来源:CSDN