在设计篇(1)中我们大概探讨了如何设计一个中心服务器,并且说明了设计中心服务器的作用和实现的原理。这次我们将探讨一下登录服务器的设计。
登录服务器,顾名思义就是主要负责用户登录信息的认证的。除了对用户的登录信息进行认证以外,登录服务器应该还负责一些其它的功能:
1:向通过认证的用户发送游戏树形信息。
2:向通过认证的用户发送当前游戏的在线人数。
首先我们来讲述一下登录服务器的第一个功能:“向通过认证的用户发送游戏树形信息”。
大家都知道,就一般游戏而言,当用户登录进入以后,在游戏大厅的左面会有一个树形的游戏列表信息。在这个列表信息中说明了这个游戏平台所包含的游戏的名称,以及每个游戏当前存在的房间。例如下图:
对于这些树形列表,我的设计是保存在服务端数据库中的一个叫做“树形信息表”的表中。
“树形信息表”的字段设计是:
字段中:
TreeID : 这个树形的节点编号。
GameID: 这个树形节点所对应的游戏编号。
ParentTreeID: 这个树形节点的父节点编号。
WEB: 这个树形节点对应的说明网址。
TreeName: 这个树形节点显示的名称。
TreeIco: 这个树形列表显示的图标。
VER: 这个树形节点对应的游戏的版本。
DownURL: 下载这个树形节点所对应的游戏的网址。
通过这个“树形信息表”中的信息,我们可以在客户端绘制出一个树形列表(m_RoomList)。但是这个表中只说明到如何挂接一个游戏,而一般的游戏都会在游戏节点下面显示出这个游戏有几个房间,以及房间的名称等信息。
房间信息的获得是通过中心服务器获得的。中心服务器将收集的游戏服务器所管理的房间信息通过整理发送给登录服务器。登录服务器根据游戏编号将这些房间信息保存在链表m_RoomList中。当用户登录成功以后,登录服务器将这个链表中的信息发送给客户端,客户端绘制树形信息。这样客户端大厅的树形信息就绘制出来了。
其次我们来讲述一下登录服务器的另一个功能“向通过认证的用户发送当前游戏的在线人数”。我们在玩QQ游戏或者远航、联众游戏的时候都可以看到在游戏名称的后面或者在房间名称的后面会显示出这个游戏或者房间当前的人数信息。虽然客户端和登录服务器的连接属于短连接,但是当用户登录成功以后,显示出每个游戏和每个房间的人数是很有必要的。
每个游戏服务器可以方便的汇总出自己管理的每个房间的在线人数信息。中心服务器定时向每个游戏服务器发送请求信息,从每个游戏服务器上获得这些人数信息,并在中心服务器上进行汇总。将汇总后的结果发送给登录服务器。登录服务器将这个人数信息依然保存在链表
m_RoomList中。当用户登录成功以后发送给客户端。客户端进行绘制。
以上两点是我设计的登录服务器所具有的功能。其实登录服务器除了这两点基础功能以外还可以扩展出例如“好友信息”,“好友在线信息”等功能。
下次我们将探讨棋牌类游戏服务端的主要部分——游戏服务器的设计。由于游戏服务器实现的功能很多,所以我将会将它分开来阐述。
本文转自狗窝博客51CTO博客,原文链接http://blog.51cto.com/fxh7622/73189如需转载请自行联系原作者
fxh7622