正式机器、多版本引擎与热更
上线后的日常运维三件事:填对正式机器信息、整包升级时兼容多版本客户端、不停服热更修问题。
正式机器信息
在开发者平台提交新增服务器申请并通过后,会以站内邮件(标题「PE 网络游戏服务器发放通知」)发放机器信息。按类型填到 MC Studio:
| 资源 | 填写位置 | 要点 |
|---|---|---|
| MySQL | 服务器配置 → 数据库 → 勾 mysql | IP 填域名;库名/账号都填发放的账号(二者一致);填密码/端口 |
| Mongo | 数据库 → 勾 mongo | 同上;Mongo 与 MySQL 一般只发其一 |
| Redis | 数据库 → 主 redis | 必须填;填域名/密码/端口 |
| InfluxDB | 更多 → 监控运营数据 | 填域名/账号/密码/端口 |
| Grafana | 浏览器登录 | 需先访问白名单 URL(?type=grafana) |
| 正式服务器 | 基础配置 → 机器列表 + 游戏配置各服 IP | 登录服务器需先访问白名单 URL(?machine=<服务器IP>) |
两个白名单 URL 参数不同
登录服务器和登录 Grafana 走不同的白名单参数,别混用。库名和账号在设计上一致,所以发放信息里只给账号。
多版本客户端引擎支持
整包升级期间,让新旧版本客户端都能进,避免升级后低版本进不来。
原理:proxy/master/service 天然兼容多版本,只需解决 lobby/game——把玩家按协议版本分到对应版本的 lobby/game(1.23 玩家进 1.23 服,1.24 进 1.24 服)。
配置:lobby 和每类 game 都同时部署多个版本;master/service/proxy 配成其中最高版本。
代码:
- 登录:Apollo 默认会把玩家分到适配 lobby,无需额外开发。但若你用
SetLoginStratege自定义了登录策略,就要用GetProtocolVersionByUID拿协议版本,分到适配版本服务器,并过滤掉滚动更新中已下线的无效服(IsValidServer)。 - 切服:lobby/game 向 master 请求目标服,master 按协议版本找适配服务器列表随机选一个有效服返回,再执行
TransferToOtherServerById。
python
# master:按协议版本选有效的目标 game 服
def loginStratege(uid, callback):
protocolVersion = netMasterApi.GetProtocolVersionByUID(uid)
targetIds = self.mVersion2TargetServerIds.get(protocolVersion, [])
targetId = random.choice(targetIds)
if not serverManager.IsValidServer(targetId): # 过滤滚动更新中下线的服
targetIds = [s for s in targetIds if serverManager.IsValidServer(s)]
self.mVersion2TargetServerIds[protocolVersion] = targetIds
targetId = random.choice(targetIds)
callback(targetId) # 必须执行,继续登录后续流程
netMasterApi.SetLoginStratege(loginStratege)上线阶段热更
热更 = 不停服把代码更新到线上,玩家不掉线。
适用条件:只改了 developer_mods 里的代码,且只改函数内实现。符合这个条件的修改能通过平台的有条件免审。
步骤:① 改代码(守住上面的条件)② 自测通过后在开发者平台提审 ③ 过审后审核状态变「已审核—通过」④ 右键上线阶段游戏 →【服务器热更】⑤ 最近一个通过有条件免审的版本热更到线上,详情看部署日志。
热更前后发公告
虽然玩家不掉线,仍建议通过游戏公告告知更新内容,提升体验。改动超出「函数内实现」范围的(如改配置、加表、改结构)走正常审核+重新部署,不能热更。
到这里,从入驻到上线运营的全流程就走完了。想覆盖手机之外的全平台玩家,看第三方框架与全平台互通。回到基岩版网络游戏首页。
