- 服务器组成
- 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性能瓶颈
- 服务器框架设计
- 万人同服
网络游戏服务器架构
最新推荐文章于 2024-08-30 11:44:09 发布