网络游戏服务器架构

时间:2022-06-01 19:49:09
  • 服务器组成
    • session:负责账号管理和验证,gateway和world信息管理。
    • dbserver:负责数据库相关事务。
    • gateway:负责管理所有玩家的连接管理,是world和client的消息中转。
    • world:负责游戏核心逻辑。
  • 服务器部署
    • session:1个
    • dbserver:若干
    • gateway:若干
    • world:若干
  • 服务器关系
    • session:与外网相连,接受client、gateway、world的连接,需要连接到dbserver。支持RPC,拥有lua处理能力。
    • dbserver:接受session、world的连接。
    • gateway:与外网相连,接受client、world的连接,需要连接到session。
    • world:需要连接到session、gateway、dbserver。支持RPC,拥有lua处理能力。
  • 游戏流程
    • 登陆过程
      • client通过选择大区服务器连接session,并输入账号和密码。
      • session收到登陆消息后,通过deserver进行验证,验证失败则想client发送失败通知。
      • 验证成功则生成验证码。并向client发送gateway地址和验证码。
      • client收到gateway地址和验证码,向gateway连接并发送验证码。
      • gateway收到client连接消息和验证码,发送验证码到session去校验。
      • 校验失败返回验证失败。验证成功session向client发送角色信息。
      • client可以进入创建角色界面,并向session发送创建角色的消息。
      • client选择角色后,先断开与session的连接并通过gateway连接进入world。
    • 换线和重登过程
      • 目前是先断开与gateway的连接在去连接session,重复登录过程
      • 这里需要优化,不需断开gateway,直接通过gateway换world。
    • 广播过程
      • world存有所有gateway连接,向所有gateway发送消息。
      • gateway保存有若干client的连接,向所有client发送消息。
    • 跨线操作
      • world存有所有gateway连接,向所有gateway发送消息和目标worldID。
      • gateway存有所有world连接,向目标worldID发送消息。
  • 服务器优化
    • 组建中心服务器
      • 中心服务器保存有所有在线玩家的最小信息。
      • 通过这些最小信息能够处理一些逻辑(聊天,好友、帮会、邮件等需要频繁跨线的系统)。
      • 中心服务器的作用是分担world的压力,可以同时开启多个中心服务器,分别处理聊天、好友、帮会、邮件等逻辑。
      • world处理战斗、任务、对话等功能。
    • 减少数据流量
      • 事件参数清理,去除冗余数据。
      • 整理事件模型,减少事件发送数量。
    • 代码性能优化
      • 单个事件处理平均时间尽量小于1毫秒。
      • 单个事件处理平均时间最大不能超过10毫秒。
  • 服务器扯淡
    • 万人同服
      • lua性能瓶颈
      • 服务器框架设计