ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

游戏服务端架构拆解:登录、游戏、跨服是怎么各司其职的

游戏服务端架构拆解:登录、游戏、跨服是怎么各司其职的 游戏服务端架构拆解登录、游戏、跨服是怎么各司其职的引言很多游戏服务端部署时会看到一大排可执行文件或脚本xxx-login、xxx-game、xxx-cross……新手往往一脸懵不就是一个服务端吗为什么要拆这么多进程每个进程管什么这篇用大白话把游戏服务端的通用架构拆开讲看完你再去看任何一套服务端都能快速对上号。一、为什么游戏服务端要拆成多个进程现代网络游戏手游、页游、端游的架构本质上都是多进程 分层的设计原因有三故障隔离一个进程崩溃不影响其他进程玩家登录不受影响游戏服挂了也不至于全服宕机水平扩展玩家人数涨了加一台游戏服就行登录服不用动职责清晰每个进程只干一件事内存、CPU、数据库压力都能独立控制。二、核心组件拆解绝大多数游戏服务端都包含下面这几类角色名称可能叫法不同但职能一致2.1 登录服Login Server负责玩家进门这件事校验账号密码通常配合数据库或账号中心发放登录令牌Token有效期短防止伪造返回可用的游戏服列表玩家选服进入。登录服一般压力小、逻辑简单但挂了所有人进不了游戏所以通常部署得最稳定。2.2 网关服Gate Server / Proxy所有玩家的网络连接都先进网关维护海量长连接几千上万条 TCP把客户端封包转发给对应的游戏服逻辑进程帮游戏服挡一层非法封包、超时连接都在网关被过滤掉。网关是网络吞吐的瓶颈也是 DDOS 攻击最先打的位置。2.3 游戏服Game Server / 房间 / 世界这是核心逻辑进程负责玩家数据加载与保存战斗、副本、任务、聊天、交易等玩法逻辑定时任务刷新、结算、活动。游戏服是 CPU 密集区也是 bug 的高发区。大型游戏会按分线 / 分副本开多个游戏服进程分摊玩家。2.4 跨服 / 中心服Center / Cross Server大型游戏还会有一个跨服节点跨服战场、跨服排行、全服公告统一管理所有游戏服做合并数据、全局排行部分架构里充值、活动配置也放在中心服。2.5 数据层数据库 缓存MySQL/MariaDB玩家账号、角色、背包等持久化数据Redis在线状态、排行榜、临时缓存读写快扛高并发玩家数据并非实时写库而是游戏服内存里维护定期或下线时落库——这也是为什么强制关服/拔电可能丢数据。三、一次登录的数据流时序视角把上面串起来玩家从登录到进游戏大概是这样的流程客户端 │ ① 账号密码 ▼ 登录服 ──② 校验账号/验证码/Token──► 数据库 │ ③ 返回登录令牌 服务器列表 ▼ 客户端 ──④ 选服 携带令牌──► 网关服 │ ⑤ 校验令牌Redis 比对 ▼ 网关服 ──⑥ 建立长连接──► 游戏服 │ ⑦ 加载玩家数据读数据库/缓存 ▼ 游戏服 ──⑧ 下发角色/场景数据──► 客户端 进入游戏任何一步断了都会有对应的表现第二步错是密码错误/账号不存在第五步错是连接服务器失败/令牌过期第七步错是卡在读档/创建角色。四、不同游戏类型的架构差异游戏类型特点典型架构回合制手游单服承载多、逻辑重登录服 1 个游戏服 跨服MMORPG 端游地图大、人数多登录服 网关 多分线游戏服 跨服H5 页游大量静态资源 接口Nginx 逻辑服 数据服棋牌/休闲房间制、短连接高频登录服 大厅服 房间服集群小体量的单机架设场景很多服务端把登录、游戏、网关合在一个进程里一键端就干这事但内部模块划分依然是上面这套。五、部署时的实操建议看启动脚本服务端目录里一般有start.sh/run.sh/ 一键启动脚本先cat看它依次启动哪些进程顺序即依赖顺序通常先数据库 → 登录 → 网关 → 游戏按依赖顺序启动很多启动失败都是因为前一个进程没起来后一个连不上查进程树psaux|grep-Elogin|game|center|gate关注日志分离每个进程的日志分开出问题直接定位对应进程的日志文件。五、小结游戏服务端架构的骨架就是登录服把门、网关扛压、游戏服算逻辑、跨服做汇总、数据库和缓存管数据。看懂这套分工你就能解释 80% 的部署报错报错在哪个进程问题就在哪个环节。下次再看到一串进程不要慌先对号入座。技术资料整理与更多游戏服务端架构经验欢迎访问 jiaobenwang.com 交流。
返回列表