I want to fly higher
programming Explorer
posts - 112,comments - 263,trackbacks - 0

一种经典的分布式游戏服务器

整体
  • 网关服务器(全局网关)-Gate
    • 用于为客户端提供统一的连接入口
    • 为用户分配登陆验证服务器和连接服务器
  • 登陆验证服务器-LoginAuth
    • 用户的注册和验证
  • 连接服务器(游戏网关)-Link
    • 维持客户端与服务端的长连接
    • 转发客户端和服务端之间的消息
  • 场景服务器
    • 处理游戏场景中的游戏逻辑
细节
  • 用户登陆时,会首先连接网关(http或者socket均可),网关通过rpc或者http请求验证服务器完成验证;验证通过后获得由网关分配的连接服务器信息,之后客户端会断开与网关服务器的连接,连接返回的连接服务器
  • 一张游戏地图与一台独立的场景服务器对应,场景不能进行分割.场景服务器负责维护场景中所有实体并驱动场景逻辑运转.主要逻辑包括实体管理、消息服务、ai服务、aoi服务.可通过加入新的游戏场景的方法来分散用户且一些和场景相关的服务器可通过独立运行的方式进行水平扩展.另外对于跨场景的操作则是通过一个全局服务器来进行处理
  • 聊天服务可与场景服务分离,通过一个独立的服务器进行
  • 寻路和副本组队均可独立出服务器进行
  • 内部服务器之间可通过rpc进行调用
图示
引用
思考
  • 按照此种方式设计,如果要实现百万人同时在线,则还是需要分服,因为此种设计场景是最小的单位;根据压测算出一组服务器承载的压力上限,然后根据导入服务器人数进行服务器规划部署
  • Gate、LoinAuth、Link等均可进行水平扩展
  • 场景逻辑中的一些服务如寻路、副本等均可进行水平扩展

无缝大世界的游戏服务器

基本思想
  • 整个服务器主体分为三层,NODE专注场景,OBJ专注玩家对象,GATE专注网络。这样的模型在无缝场景服务器中得到广泛的应用
  • 每台 Node服务器用来管理一块地图区域,由 NodeMaster(NM)来为他们提供总体管理
  • 玩家从一块区域走向另外一块区域
  • 将地图按照标准尺寸均匀切割成静态的网格,每个格子由一个具体的Node负责,但是根据负载情况,能够实时的迁移到其他 Node上。在迁移分为三个阶段:准备,切换,完成。三个状态由Node Master负责维护
类似引擎实现
  • bigworld、kbengine
    • loginapp:登录验证、注册、接入口;与客户端的第一个连接点;dns负载均衡
    • baseapp:与客户端通讯的固定点(proxy/gate);与cellapp通讯的中介;用来处理无空间属性的逻辑
    • baseapp_mgr:管理所有baseapp及负载等
    • cellapp:空间数据的处理
    • cellapp_mgr:管理所有cellapp及负载等
    • dbmrg:管理数据存储等
    • daemon:监视服务器进程等
引用
思考
  • 比较广泛的解决方案,但自实现难度较大,不建议使用
  • 目前除了bigworld引擎,网易手游内部根据其架构实现了一个叫mobile_server的简化版,有'乱斗西游'等成功产品

其他方案参考

NoahGameFrame
  • Server Architecture
  • 优缺点
    • 无单点
    • 结构较复杂
pomelo
  • LordOfPomelo
    • 是一个基于Pomelo框架开发的分布式MMORPG游戏Demo
  • 优缺点
    • 采取了大量web服务器的思想,使用zk使一些全局单点做了高可用
    • 使用node.js,小众
引用
posted on 2017-03-06 14:18 landon 阅读(1303) 评论(0)  编辑  收藏 所属分类: GameServer

只有注册用户登录后才能发表评论。


网站导航: