棋牌游戏服务端设计

服务器架构

游戏系统组件

  • 中心服

中心服用于向客户端提供全局配置及初始化,它不直接与玩家交互,主要维护游戏列表和房间信息,主要包括游戏类型、游戏种类、房间信息、在线等。

中心服配置主要包括网络配置和数据库配置,网络配置包括监听端口、最大连接数,这里的最大连接数是指最多支持多少个登录服和房间服,因为只有这两种服务器会连接中心服。数据库配置主要包括服务器数据库所在机器的IP和端口以及账户密码。中心服会根据这些配置来管理游戏列表、房间列表等信息。

  • 登录服

登录服主要提供玩家注册与登录校验,它可定时从中心服取回游戏列表和房间信息,因为这些数据在不断变化,登录服需要在玩家登录时将这些信息返回。

  • 大厅服

大厅服主要用于玩家连接游戏,创建房间、加入房间、比赛模式服务自动分配房间。

  • 房间服

房间服控制游戏房间的启动、停止、添加、删除等管理操作,它可在启动时向中心服注册,关闭时从中心服注销。玩家进入房间时通知中心服更新在线人数,并定时连接中心服更新游戏列表和房间信息。

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

房间服需要和玩家进行交互,玩家进入房间,找桌子坐下时请求由自己来处理。而游戏操作如加注、发牌等,房间服会转发给游戏模块进行处理。

房间服管理着在线用户列表,在玩家进入房间和离开房间时都需要更新在线数据,在线列表中记录的玩家信息从玩家库中加载。玩家在进行游戏时,由于输赢的关系玩家积分或游戏币都会随之变化,为了记录这些变化,它需要和游戏库进行交互。

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

玩家的大部分操作都是和房间服来响应的,启动一个房间服实例相当于开启一个新的房间,所以要扩容基本上只需要增加机器并开启更多的房间服即可。房间服的配置主要包括房间基本信息、网络配置、数据库配置、与中心服相关配置。房间基本信息包括房间类型、桌子数、椅子数等。网络配置主要包括监听端口和最大连接数,这里的最大连接数是指房间内最多支持多少玩家同时在线。房间服和登录服一样,需要定时从中心服更新游戏列表和房间信息发送给客户端。

  • 数据库

保存用户信息、游戏数据、系统运行状态、日志等

游戏系统结构

采用多服分布式架构,由一个中心服(CenterServer)、多个主服务器(MainServer)、多个从服务器(LocalServer)同时工作以实现游戏逻辑、用户管理、通讯等功能。

  • 中心服:向客户端提供全局配置以及初始化数据,主要是定位一个主服务器的IP地址。
  • 主服务器:管理客户端用户身份验证与登录、管理从服务器的建立、数据库读写
  • 从服务器:管理客户端游戏通信、大厅与房间等,可自由添加、删除、修改。

游戏系统流程

游戏玩家登录

客户端用户在登录场景中点击登录,登录方式可能是游客、微信等。登录实际上是请求玩家的信息、游戏服IP与端口、玩家房间信息等。当用户登录成功后,会使用获取到的IP和端口跟游戏服建立长连接,同时会根据房间信息,选择进入大厅或是游戏。

玩家开房

  1. 客户端将用户账户密码发送给登录服执行登录操作,登录服验证成功后返回游戏列表给客户端。
  2. 玩家选择具体游戏后进入房间,客户端发送请求给房间服务器,房间服务器将房间信息返回给客户端显示。
  3. 玩家选择桌子坐下开始游戏时,客户端将游戏动作发送给对应的房间服务器,房间服务器将操作解析后转发给游戏逻辑模块进行处理,并将处理结果返回给客户端。
玩家开房

用户与服务器交互流程

  1. 系统是首先启动中心服,中心服从配置文件中读取主服务器列表、客户端所需的全局配置、初始化数据等。
  2. 中心服等待客户端的连接,客户端连接后中心服将定位到某个主服务器的IP地址和端口,发往客户端。
  3. 客户端收到主服务器信息后,与中心服断开连接。
    主服务器启动后,可以在主服务器中创建多个从服务器与房间,创建完成后从服务器的IP和端口就作为唯一标识写入数据库和主服务器内存。
    房间号、房间所属游戏类型、所属从服务器编号作为房间的房间的唯一标识被写入数据库和主服务器内存。
    从服务器创建以后,就在它所属的机器上启动。
  4. 客户端与主服务器建立连接
    客户端登录后首先和主服务器建立连接,一直到客户端退出时才断开。建立连接成功后生成界面结构树。
  5. 主服务器从数据库中读取从服务器信息到主服务器内存
    首先读取游戏类型以建立基本信息,然后读取界面树节点以获取客户端界面结构、从服务器信息、大厅与房间信息。

客户端请求登录并成功与主服务器连接时,主服务器将这些信息一次性发送到客户端内存,客户端根据这些信息生成界面结构树。

当用户点击某个游戏房间时,系统从内存中读取房间信息,根据房间所属的从服务器IP和端口,尝试和从服务器建立连接,连接成功后从服务器会将房间信息发送给客户端。客户端收到后根据这些信息生成房间。

每当客户端游戏位置发生改变时将向从服务器发送改变信息,从服务器保存、修改所有与之连接的客户端的位置信息列表。

当房间桌子坐满时游戏开始,游戏开始后客户端与从服务器通信并更新游戏信息。

当客户端退出游戏即返回大厅这个房间。当退出大厅时首先和从服务器断开连接,然后和主服务器断开连接,最终终止整个客户端程序。

游戏组件模块

组件模块以中心数据管理模块为中心,数据库处理模块和socket管理模块提供外部操作联系。

游戏组件模块
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,874评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,102评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,676评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,911评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,937评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,935评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,860评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,660评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,113评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,363评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,506评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,238评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,861评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,486评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,674评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,513评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,426评论 2 352