查看: 215|回复: 1

棋牌游戏服务器架构: 总体设计(3)

[复制链接]

10

主题

44

帖子

271

积分

vip会员

Rank: 1

积分
271
发表于 2020-3-27 15:42:36 | 显示全部楼层 |阅读模式
3 Applications

      前面的无论是libraries还是core,都是死的,只有applications加入了逻辑,它们是棋牌服务器的主休。下面是关于它们的比较详细的信息

3.1 CenterServer

棋牌游戏服务器架构: 总体设计(3)

            图2  CenterServer与外界的交互图

      CenterServer不直接与玩家进行交互,它主要的功能是管理游戏列表和房间信息,包括:

      1. 游戏类型信息: 棋牌游戏、休闲游戏、视频游戏等。

      2. 游戏种类: 比如在棋牌游戏这个大类之下有:德州扑克、斗地主、升级等。

      3. 站点信息: 因为这个服务器架构完全支持分布式,所以还保存有站点的信息

      4. 房间信息: 维护当前有哪些房间以及房间当前的在线人数。

      CenterServer中有关游戏列表的信息是它在启动的时候从ServerInfoDB这个数据库加载的, 而它的房间信息来自RoomServer,RoomServer在启动时将自己注册进来,在关闭的时候从CenterServer中注销自己。同时在玩家进入房间的时候,还会要求CenterServer更新在线人数。

  CenterServer还应该响应LogonServer和RoomServer的请求,将游戏列表和房间信息返回给它们。

3.2 LogonServer

棋牌游戏服务器架构: 总体设计(3)

              图3 LogonServer与外界交互图

      LogonServer提供注册新的游戏玩家服务并且处理游戏玩家的登录请求。

      LogonServer需要和UserInfoDB交互,这些交互包括:

      1. 在注册的时候写入注册玩家的信息。

      2.在玩家登录的时候与数据库玩家信息进行核对。

      LogonServer会定时地向CenterServer发送更新游戏列表和房间信息的请求,因为这些信息在不断地变化,而LogonServer需要在玩家登录时将这些信息返回给他们。

3.3 LogServer

棋牌游戏服务器架构: 总体设计(3)

  图4  LogServer与外界的交互图

      有时候,玩家可能会对游戏的过程产生怀疑,或者想回顾整个游戏的过程。这就需要服务器将游戏的过程以Log的形式存储起来,供玩家检查用。LogServer的就是用来响应玩家的核查的请求,然后从GameLogDB中将整个游戏过程返回给客户端,客户端以视频地方式显示给玩家。

      玩家在请求检查的时候,客户端会将这局游戏的以及玩家的信息id发送到LogServer, LogServer根据游戏id的信息从GameLogDB取出日志信息返回给玩家。游戏的过程可以用结构化语言描述出来,本来postgresql直接支持Json,也就是说Log可以以JSON的形式存在数据库之中,但是由于可能会有字节序的问题,所以Log的信息也要用protobuf序列化了再存入数据库。LogServer在从数据库中读出日志后不用反序列化直接返回给客户端反序列化。

3.4 RoomServer

      RoomServer可能是最重要的一类Server了,一个RoomServer会和一个游戏模块结合在一起。它管理着游戏的一个房间,处理玩家进入房间,找桌子座下的请求,并将游戏相关的消息转发给游戏模块进行处理。不仅不同的游戏会有不同的RoomServer,即便是同一游戏,也可能有多个RoomServer, 比如对于德州扑克来说,就可能有vip房间,普通房间等等,同一类型的房间也可能有Room1,Room2,这个可以根据玩家量按需架设。图5给出了RoomServer与外界交互的图。

棋牌游戏服务器架构: 总体设计(3)

图5 RoomServer与外界的交互图

      RoomServer启动的时候,先要发送请求给CenterServer进行注册,在关闭时要从CenterServer中注销。同时还会定时通知CenterServer更新在线人数, 定时从CenterServer上取回最新的游戏列表和房间信息。

      RoomServer需要和玩家进行交互。玩家进入房间,找桌子座下等的请求都由RoomServer来处理,而游戏操作。比如说加注、发牌等 RoomServer会直接转发给游戏模块进行处理。

      RoomServer管理着一个在线用户列表,在玩家进入房间,离开房间时这个列表随之更新。这个列表中有关玩家的详细信息是从数据库UserInfoDB中加载到的。 玩家在进行游戏时,由于输赢的关系,他的积分或者游戏币会随着变化,为了记录这些变化, 需要与GameDB进行交互。

      管理员可以通过RoomServer来发布消息、踢出玩家、警告玩家、设置玩家权限、设置房间属性等活动。

      玩家也可以通过RoomServer参与聊天(包括大厅公聊和私聊)。



回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | enginedx注册

本版积分规则

 
 



邮件留言:


 
返回顶部