前言:
  最近研究了一些游戏服务器的架构和实现, github上找了几个开源的实现. 有几个感觉不错, 打算仔细研读一下.
  游戏服务器种类繁多, 这边主要是基于状态同步的棋牌类游戏, 适合入门, ^_^.

研究案列:
  cashino-server(git地址, 请点击这里)这个项目好像是中国人写的, 从文档和提交者可以略见端倪, 代码是基于nodejs实现, 后端唯一的中间件是redis.
  项目非常的强大, 可以说实现了一个分布式的版本, 可扩展性强. 添加新的棋牌游戏, 按照固定的套路实现即可. 当前主要实现了2款游戏, 德州和炸金花, 基本上是中外人民喜闻乐见的娱乐项目, ^_^.

解读架构:
  一般的棋牌类游戏都有一个大厅服务器和具体的游戏(房间)服务器, 这边的架构实现也不例外.
  
  其由一个大厅服务器(集lobby, user, gateway), 和具体的游戏服务(cashino)组成. 整个游戏服务架构舍弃了常规的服务注册定位和路由模式, 巧妙地借用发布订阅模式来实现整合. 房间用户数据实时落中心化的存储. 客户端不再需要另起socket直连房间服务, 大厅服务本身可以无状态多节点部署. 当然这一切都是redis的功劳, 或者说项目作者对redis的魔性使用.
  

  login server和game server之间, 不再有http/rpc的直接交互, 只有借助redis队列实现的发布订阅关系. 这就是这个项目和其他常规棋牌类游戏服务架构的最大不同.

浅谈消息机制:
  客户端(h5, android/ios)和login server是基于websocket构建的长链接, 后续的消息交互都是通过login server中转.
  而服务内部其消息通讯机制, 正如上图的构建中, 全通过订阅/发布的消息队列来实现的.
  玩家发往房间的消息, 是通过login server节点, 往房间相关的队列推送消息, 对应的game server节点会消费并处理消息. 反之房间发送给玩家的信息, 则往用户对应的队列推送消息, 对应的login server节点会接受, 并同步返回给玩家.
  login server和game server彼此没有直接交互, 而且登陆于不同login server节点的玩家, 也能在同一个房间一起玩.

整体评价:
  cashino-server写于3年前, 应该还是属于研究试验型的阶段, 没有经历过真正商业化的考验. 
  架构上有它独创的一面, 巧妙地利用发布订阅的模式, 解决了内部交互的复杂度. 同时该设计对扩展友好, 可以非常方便扩展新的游戏(房卡模式的棋牌类), 只需要关注游戏本身逻辑就行.

总结:
  后续会再写几篇文章, 更加深入去研究剖析下该项目, 希翼从中获取更多的知识.

源码casino-server剖析(1)--游戏服务的整体架构和实现的更多相关文章

  1. Tomcat源码分析二:先看看Tomcat的整体架构

    Tomcat源码分析二:先看看Tomcat的整体架构 Tomcat架构图 我们先来看一张比较经典的Tomcat架构图: 从这张图中,我们可以看出Tomcat中含有Server.Service.Conn ...

  2. [源码解析] 模型并行分布式训练Megatron (2) --- 整体架构

    [源码解析] 模型并行分布式训练Megatron (2) --- 整体架构 目录 [源码解析] 模型并行分布式训练Megatron (2) --- 整体架构 0x00 摘要 0x01 启动 1.1 分 ...

  3. 《Spring源码深度解析》学习笔记——Spring的整体架构与容器的基本实现

    pring框架是一个分层架构,它包含一系列的功能要素,并被分为大约20个模块,如下图所示 这些模块被总结为以下几个部分: Core Container Core Container(核心容器)包含有C ...

  4. 项目源码--Android迷幻岛屿综合游戏

    下载源码 技术要点: 1.游戏开发综合技术 2.多线程机制实现游戏逻辑 3.自定义控件,系统控件等综合图层的使用 4.图层素材动画的综合技术 5.游戏算法的实现 6. OpenGL ES的综合使用 7 ...

  5. MyBatis 源码篇-MyBatis-Spring 剖析

    本章通过分析 mybatis-spring-x.x.x.jar Jar 包中的源码,了解 MyBatis 是如何与 Spring 进行集成的. Spring 配置文件 MyBatis 与 Spring ...

  6. [源码解析] PyTorch 分布式之弹性训练(4)---Rendezvous 架构和逻辑

    [源码解析] PyTorch 分布式之弹性训练(4)---Rendezvous 架构和逻辑 目录 [源码解析] PyTorch 分布式之弹性训练(4)---Rendezvous 架构和逻辑 0x00 ...

  7. [源码解析] PyTorch 分布式(10)------DistributedDataParallel 之 Reducer静态架构

    [源码解析] PyTorch 分布式(10)------DistributedDataParallel之Reducer静态架构 目录 [源码解析] PyTorch 分布式(10)------Distr ...

  8. Derek解读Bytom源码-Api Server接口服务

    作者:Derek 简介 Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom ...

  9. zabbix源码安装后,设置为服务启动和关闭

    zabbix源码安装,使用service启动与关闭服务 1. zabbix客户端的系统服务脚本 1.1 拷贝启动脚本 zabbix的源码提供了系统服务脚本,在/usr/local/src/zabbix ...

随机推荐

  1. Centos 7 JDK 安装(默认之前没有安装过)

    第一步: 安装JDK,先检查JDK是否存在,输入以下命令回车: java -version 没有安装过会显示: [root@heyouhao /]# java -version [root@heyou ...

  2. JAVA中的四种JSON解析方式详解

    JAVA中的四种JSON解析方式详解 我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式. 1.JSON官方 脱离框架使用 2.GSON 3.FastJSON ...

  3. 【开发笔记】- grails框架中在使用domain的save方法保存时保存不成功

    1.如果报错,自行根据异常查找错误,这里不说明 2.如果为报错,我遇到的就是domain中的字段属性与数据库中为同步 (1)你的domain是新的,在增加新的字段属性时未使用update更新数据库,造 ...

  4. 移动前端viewPort的那些事

    1.viewport简单说 一般来说,移动上的viewport都是大于浏览器窗口的,不同的设备有自己默认的viewport值(980px或1024px). 2.三个viewport的理解(layout ...

  5. bugku——蹭网先解开密码(EWSA,hashcat破解wifi握手包)

    题目地址:http://ctf.bugku.com/files/77decd384a172b9a2294e6c6acfd48cc/wifi.cap 下载是个.cap的文件,破解过wifi的童鞋肯定知道 ...

  6. jquery添加插件

    转自:https://www.cnblogs.com/joey0210/p/3408349.html 前言 如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquer ...

  7. 微信小程序-获取当前位置和城市名

    微信小程序-获取当前城市位置 1, 获取当前地理位置,首先要拿到用户的授权wx.openSetting: 2,微信的getLocation接口,获取当前用户的地理位置(微信返回的是经纬度,速度等参数) ...

  8. Go Programming Language 3

    [Go Programming Language 3] 1.These two statements declare a struct type called and a variable calle ...

  9. 逆向破解之160个CrackMe —— 031

    CrackMe —— 031 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...

  10. django bms

    1. 创建模型 一对多: 需要在""多""的表创建一个""关键字段"" 关联  就像在mysql的哪项少的比如(书与出版 ...