棋牌游戏服务器架构: 部署
首先要说明的是, 这个棋牌游戏的服务器架构参考了网狐棋牌的架构。网狐棋牌最令人印象深刻的是其稳定性和高网络负载。它的一份压力测试报告上指出:一台双核r的intel xeon 2.8cpu加上2g内存和使用共享100m光纤的机子能够支持5000人同时在线游戏。
在研究其服务器框架后发现,它的网络部分确实是比较优化的。它主要采用了windows提供的io完成端口来实现其网络组件。本服务器虽然参考了其设计,但是还是有很大的不同,因为这个服务器框架主要是用在linux系统之上,而网狐棋牌是基于windows平台的,严重依赖于windows sdk。这个架构延续了网狐棋牌在网络组件所作的努力,这个棋牌的服务器也使用异步io作为网络的工作方式,更为彻底的是其数据库也是采用异步架构。boost::asio提供了一个异步框架,所以它的几个核心组件: tcpserverservice, timerservice, databaseservice, asyncservice中都可以看到boost::asio的影子。
, 图1是总体架构图。从图上我们看到服务器的整体架构分为三层:libraries, core和applications。core层基于libraries实现,而applications使用core层提供的服务,并且要监听core层的异步事件(socket、database等)。
在这个部署中有1个centerserver,1个logserver,3个logonserver和很多个roomserver(只显示了德州扑克的两个房间)。这些server有可能分布在同一台机器上,也可以分布在不同的机器之上。这对扩容来说是极为方便地。在玩家数量增大,系统不足以承载其网络负载时,只需要买更多的机器,架设更多的roomserver或者logonserver就行了。
这里再分析一下一个中心服务器最多可支持多少玩家同时在线。假定1台机器最多可以有5000个连接,也就是说我给可买5000个机器作为logserver + roomserver, logserver的数目不会太多,可以忽略,所以最多有roomserver可以管理最多5000x5000个用户同时在线。
1布署数据库
选定作为数据库服务器的机器以后,要先安装postgresql数据库,然后导入serverinfodb(centerserver使用), userinfodb(logonserver、roomserver、logserver使用),userscoredb(roomserver使用),还有有关各个游戏逻辑的数据库,比如texaspokerdb等等。这些数据库不一定要放在一台机器上,可以布置在不同的机器上,因为本架构是支持分布式数据库的,你只要记住每个数据库所在机器的
2启动服务器
2.1 启动centerserver
首先要修改中心服务器配置,主要包括两个方面的配置:网络配置和数据库配置。
网络配置包括: 监听端口、最大连接数。这里的最连接数它的是最多支持多少个logonserver + roomserver。因为只有这两种server会连接centerserver。
数据库配置包括:serverinfodb所在机器的ip地址,端口号,连接要用的用户名和密码
配置好以后,就可以直接启动中心服务器了,中心服务器会根据这些配置信息来管理游戏列表,房间列表等信息。
2.2 启动logonserver
第一步也是配置服务器,主要的配置信息为:
网络配置: 监听端口和最大连接数。 这里的最连接数控制这个logonserver最多同时支持多少人同时登录。
数据库配置:主要是配置userinfodb的地址,端口连接所用的用户名和密码。
centerserver相关配置: 主要有中心服务器所在ip,端口。需要centerserver的相关信息是因为logonserver会定时地从centerserver中更新游戏列表和房间信息。
配置好以后就可以启动logonserver了。
2.3 启动logserver
这个服务器做的工作比较简单,就是处理玩家的查看游戏过程用的。主要有以下配置项:
网络配置: 监听端口和最大连接数。
数据库配置: gamelogdb所在的ip,端口,连接所用的用户名和密码
配置好以后启动即可。
2.4 配置roomserver
玩家的大部分操作都是由这种服务器来响应,启动一个roomserver实例相当于开启一个新的房间,所以要扩容,基本上只需要增加机器并开启更多的roomserver即可,其配置包括:
房间基本信息: 房间类型(vip房间,比赛房间,普通房间等), 桌子数,每个桌子的椅子数等等。
网络配置: 监听端口和最大连接数。这个最大连接数就是本房间最多支持多少玩家同时在线玩游戏。
数据库配置: 包括userinfodb,具体游戏的db(比如texaspokerdb)的地址,端口,以及用户名和密码。
centerserver相关配置:这个配置和logonserver一样,需要这个配置也是因为roomserver会定时地从 centerserver中更新游戏列表和房间信息发送给客户端。
最后启动这个房间。在配置房间以后,玩家就可以通过客户端或者网页进行游戏了。
广告位 |