棋牌游戏服务器架构: 详细设计(二) 应用层设计

这里的应用层,指的是CenterServer、LogonServer、LogServer、RoomServer等几个服务器,另外还包括游戏模块的设计。不过游戏模块和前4个服务器的设计很不相同。这里先说一下服务器应用的详细设计。

这上面提到的4个服务器都需要响应客户端(这里的客户端的意思是泛指)的请求,进行数据库操作,同时还要能够配置,以及显示系统运行的状态信息等。这里会采用MVC模式来组织应用层逻辑 。

图1  Application层基本结构

IController从ITCPServiceObserver继承而来,会与ITCPServerService进行交互,因此它需要解析客户端发过来的请求,如果需要作数据操作,则转发给IModel处理。

IModel从DBServiceObserver继承而来,一些获取数据及存储数据的操作由它完成,这是通过IDatabaseServicer提供的服务完成的。

IView实现了IObserver接口,主要用来显示IController和IModel的一些状态信息以及其他消息。

Applications中的内个Server只要按照其任务实现IController,IModel和IView就行了。

1  Center Server详细设计

CenterServer的主要功能是维护游戏列表和房间信息。游戏列表是从ServerInfoDB中加载到的,下面是一个简略的结构图。

图2 CenterServer维护的信息结构

因为前面已经详细介绍了应用层架构,所以这里只是列出IModel的实现,至于IController的实现,则是解析请求。要么用ServerList中取出游戏列表信息和房间信息返回之。要么向ServerList中添加房间,删除房间以及让ServerList更新在线人数等。

CenterServer在处理请求时产生的输出信息会让IView输出显示。

2  Logon Server 详细设计

图3  LogonServer结构图

IController的实现LogonController有以下几个任务:

1) 转发注册请求给LogonHandler让其处理;

2) 转发登录请求给LogonHander让其处理;

3) 定时使用CenterSocket发送请求给CenterServer, 取回的游戏列表和房间信息存入ServerList这中。

IModel的实现LogonHandler的主要功能就是注册用户以及验证登录。

CenterSocket是用来向CenterServer发送请求的。

ServerList存的数据和CenterServer中的ServerList一样,但是其实现不同,它存的是LogonController从CenterServer中取回来的。

3  LogServer详细设计

LogServer的实现比较简单,下面是其结构图

图4 LogServer结构图

LogServer从IController继承下来,它接收玩家核查游戏过程的请求,并将其转发给LogFetcher处理,处理完成后,将结果返回给玩家。

LogFetcher实现了IModel, 它的任务很简单,就是去数据库取得游戏过程的日志。

4  Room Server 详细设计

RoomServer是最重要的一类Server,玩家的大多数操作都由它来响应,其结构图如图5所示。

图5 RoomServer结构图

UserManager继承自IModel, 主要任务是管理在线玩家,RoomController在接收到玩家进入房间的请求后,就会根据玩家的的用户名和密码从UserInfoDB中加载该玩家的详细信息,生成一个UserItem, 加入在线队列。UserManager同时还会维护一个离线队列,存储那些请求离线或者掉线的玩家。

RoomController实现了IController接口。它主要有以下几个功能:

1) 将进入房间的请求交和UserManager处理.

2) 启动时通过CenterSocket向CenterServer注册,关闭时从其中注销,同时定时通过CenterSocket从CenterServer取回游戏列表和房间信息(由于空间问题,图中没有画出来,基本和LogonServer差不多)。

3) 将游戏相关的请求转交给TableMgr处理.

4) 处理聊天及管理请求。

TableMgr管理着这个房间里的桌子。而Table则是处理公共棋牌游戏逻辑的地方。主要包括找椅子坐下,离开等。而具体地游戏命令比如德州扑克的加注等会由Table转发给GameModule进行处理。处理结果由RoomController返回给玩家。

5  Game Module详细设计

这里以德州扑克为例,来说明一个游戏的逻辑的结构,

图6 德州扑克游戏模块结构

这里虽然给出的是德州扑克的结构图,但是其他游戏也有类似的结构。

每一个游戏模块都必须要实现两个接口ITableObserver,游戏的主要逻辑就在放在这里面,因为桌子会将玩家的操作信息转化以后传递过来,所以这里是处理洗牌,发牌,玩家投注处理的最佳场所。另外一个必须实现的接口是IGameServiceMgr,这个接口是游戏模块暴露给桌子的工厂接口,桌子通过它才能创建出TexasPokerTableObserver。

IGameServiceMgr中方法说明:

1) CreateTableObserver  创建游戏逻辑处理的实现,这里会创建并返回TexasPokerTableObserver。

2) GetGameAttrib  返回游戏的属性,主要包括: 游戏的名称 ,游戏描述,游戏模块的名称,客户端模块名称,游戏数据库名称等

3) RectifyRoomOption 由于一些游戏对房间有特殊要求,所以RoomServer需要调用这个接口调整房间的一些设置

4) CreateAndroidUser 创建机器人的监听者, 其角色相当于现实中的玩家。

TexasPokerRule主要封装了德州扑克的一些基本规则,如果选出最大牌型、比较牌型的大小,洗牌,找出赢家等。

时间: 2024-08-09 05:50:20

棋牌游戏服务器架构: 详细设计(二) 应用层设计的相关文章

棋牌游戏服务器架构: 详细设计(三) 数据库设计

主要有3类Database: ServerInfoDB,UserInfoDB和GameDB. ServerInfoDB主要存储的是游戏列表的信息,UserInfoDB存储玩家的全局信息,而GameDB就是积分以及积分变化情况.下面分别加以描述. 1. ServerInfoDB ServerInfoDB主要存储游戏列表信息.主要有以下几个表: 1. GameTypeInfo,其主要字段为: TypeID:类型标识 ID TypeName:类型名字,例如棋牌类,休闲类 Enable:控制游戏大厅是否

棋牌游戏服务器架构: 详细设计(一) 内核设计

内核的几个组件被设计成Service,也就是说这几个模块都要实现如下接口: 图1  IService接口 Start方法用来启动服务. Stop 方法用来关闭服务. IsService 方法用于查询当前服务是否正在工作. 内核中的几个Service都不能够直接创建,Applications在使用这些Service的时候首先要得到一个IServiceMgr的实例,这被实现成了一个另类地单例模式.IServiceMgr的接口定义如下: 图2  IServiceMgr接口 IServiceMgr提供两

棋牌游戏服务器架构设计

转载自:简书一位同行的文章 一,棋牌类服务器的特点 1,棋牌类不分区不分服 一般来说,棋牌游戏都是不分区不分服的.所以棋牌类服务器要满足随着用户量的增加而扩展的需要. 2,房间模式 即在同一局游戏中就是在同一个房间中,同一个房间中的人可以接收到其他人的消息. 3,每个房间的操作必须是顺序性 这个特性类似与一般游戏的回合制,每个玩家的操作都是有顺序性的. 二,需要解决的技术点 1,数据共享 因为棋牌类游戏不分区不分服,我们在设计服务器的时候,是按世界服的思想去设计,即服务器是一个n多台物理机的集群

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

首先要说明的是, 这个棋牌游戏的服务器架构参考了网狐棋牌的架构.在研究其服务器框架后发现,它的网络部分确实是比较优化的.它主要采用了Windows提供的IO完成端口来实现其网络组件.本服务器虽然参考了其设计,但是还是有很大的不同,因为这个服务器框架主要是用在linux系统之上,而网狐棋牌是基于Windows平台的,严重依赖于windows sdk.这个架构延续了网狐棋牌在网络组件所作的努力,这个棋牌的服务器也使用异步IO作为网络的工作方式,更为彻底的是其数据库也是采用异步架构.boost::as

网络棋牌游戏服务器架构

一.物理架构说明 游戏系统组件包括: 服务器系统(中心服务器的控制系统,服务器登陆控制的系统,游戏登陆服务器,游戏房间控制的系统,游戏组件系统),游戏客户端(游戏大厅,游戏组件). 数据库系统:用于保存用户的信息数据.游戏积分数据.游戏系统运行状态的数据以及系统日志数据等数据. 中心服务器的控制系统:用于向客户端提供全局配置及初始化数据使用. 服务器登陆的控制系统:用于房间服务控制系统的登陆效验使用. 游戏房间的控制系统:用于控制游戏房间的启动,停止,添加,删除,管理等等. 游戏组件系统:用于具

棋牌游戏服务器架构: 部署

先看一下,下面这张可能的部署图吧. 在这个图中,可以看到,客户端的形式多种多样,可能是pc上的一个可执行文件,也可能是通过浏览器打开的一个网页,甚至于手机客户端.它们都通过internet连接到游戏服务器. 在这个部署中有1个CenterServer,1个LogServer,3个LogonServer和很多个RoomServer(只显示了德州扑克的两个房间).这些Server有可能分布在同一台机器上,也可以分布在不同的机器之上.这对扩容来说是极为方便地.在玩家数量增大,系统不足以承载其网络负载时

微信房卡麻将棋牌架设之游戏服务器架构的详细设计(一) 内核设计

题目:微信房卡麻将棋牌架设之游戏服务器架构的详细设计(一) 内核设计 今天向大家介绍一下游戏服务器的设计,着重讲解一下微信房卡麻将棋牌架设(aqiulian.com)的服务器搭建,如果有什么不懂得可以咨询我Q_212303635,欢迎大家的咨询.那么我们开始进去主题吧. 内核的几个组件被设计成Service,也就是说这几个模块都要实现如下接口: 图1  IService接口 Start方法用来启动服务. Stop 方法用来关闭服务. IsService 方法用于查询当前服务是否正在工作. 内核中

我是如何设计游戏服务器架构的

前言 现在游戏市场分为,pc端,移动端,浏览器端,而已移动端和浏览器端最为接近.都是短平快的特殊模式,不断的开服,合服,换皮.如此滚雪球! 那么在游戏服务器架构的设计方面肯定是以简单,快捷,节约成本来设计的. 来我们看一张图: 这个呢是我了解到,并且在使用的方式,而PC端的游戏服务器而言,往往是大量的数据处理和大量的人在线,一般地图也是无缝地图的完整世界观,所以不同的程序都是独立的进程并且在不同的server中运行! 而浏览器端和移动终端,在上面就说过了,它主要是不断的开服,合服,开服,合服,那

棋牌高防服务器架构

棋牌高防服务器架构q8803582 首先要说明的是, 这个棋牌游戏的服务器架构参考了网狐棋牌的架构.网狐棋牌最令人印象深刻的是其稳定性和高网络负载.它的一份压力测试报告上指出:一台双核r的INTEL Xeon 2.8CPU加上2G内存和使用共享100M光纤的机子能够支持5000人同时在线游戏. 在研究其服务器框架后发现,它的网络部分确实是比较优化的.它主要采用了Windows提供的IO完成端口来实现其网络组件.本服务器虽然参考了其设计,但是还是有很大的不同,因为这个服务器框架主要是用在linux