技术分享 网吧LOL一直重连,客户爆粗口,原理分析 [复制链接]

senry
三国LV1
技术中心 490 1 senry 5 天前
现象:

匹配成功、选完英雄进加载界面,
5分钟之后没有反应,卡在加载界面


然后客户ALT+F4 退出,重新登录游戏;
或者对局中突然掉出,
接下来就无限弹窗:





官方支持文档将这种现象称为“幽灵对局”(Ghost Game)

临时处理手段是两种:
① 等这局对局完整结算结束,服务器释放会话锁,才能继续排队;
② 临时换大区登录玩别的区(绕开当前大区的会话锁定)。
国服 2011 上线早期开服就大量反馈,官方 FAQ 就收录这个故障,riot 底层对局会话架构限制,属于底层遗留痛点,十几年一直没法彻底根除,只能规避,没法完全根治。
官方解释是:属于PVP.NET大厅服务和游戏对局服务器状态同步异常:游戏对局进程还挂在服务器上,但客户端断开了,服务器侧会话锁死,没有自动释放你的排队标记,所以你不能开新局英雄联盟.

为此 英雄联盟于 2017年版本推出了remake功能:

这样就算有人掉了,队伍中的剩余玩家可以投票结束这局游戏,减少等待时间。但是往往客户会一直重连,直到红温……


底层原理
LOL 是双进程架构,又叫分离式架构:
  • 大厅客户端(Launcher.exe):用来匹配、聊天、选英雄、商店
  • 对局游戏进程(Game.exe):对局进程,独立端口、独立会话
  • 服务器会生成对局会话 Session 令牌交给 Game 进程。而这个机制就是出现循环重连的本质:
大厅能连上服务器,但是Game 进程和对局服务器的心跳或者会话校验断了。服务器侧旧会话已然锁死,新握手一直失败 → 无限重连死循环。


哦对了,还和传输协议有关系哦。  launcher.exe 走TCP协议, 而游戏进程因为要保证实时走的是UDP。
大致建立流程
  • 匹配成功 → 大厅服务器分配本局 GameServer
  • 选英雄结束,大厅下发:GameServer IP: 端口 + 本局唯一 SessionToken
  • 本地拉起 Game.exe,带着 Token 去 GameServer 做身份校验,建立 UDP 会话
  • GameServer 记住这个 Token 绑定你的账号,你属于本局玩家
  • 对局中:Game.exe 持续发送 UDP 心跳包,证明在线
  • 正常退出:Game.exe 主动发送下线报文 → GameServer 销毁该 Token 会话

(基于 Riot 多篇工程博客 + 官方支持文档,AI反向推导出来的模型
1,Riot 技术博客公开了后端编排模型Riot Games   :《Runes Reforged: A Technical Retro》
2,Setup Port Forwarding
3,Riot技术博客《Engineering Esports》)

再说回重连故障,既然游戏是C/S模式,那就有两种情形:

  • 本地侧故障:GameServer 上你的会话记录、凭证还活着,只是本地网络 / 进程临时断连;修好本地,拿着原有凭证就能重连回去。
  • 服务器侧会话锁死:凭证在 GameServer 内存里标记为 “拒绝重连”,但条目不删除;就算本地网络、进程全修好,你拿凭证去握手也会被拒,只能等本局 GameServer 销毁.或者换个大区重建连接(大区和大区基本是物理隔绝,都有各自独立的整套组件,等于是绕开了之前的锁死,建立了新的连接。)

无限重连基本是属于后者了


怎么进一步判断是本地诱因还是服务器锁死?
  • 换大区立刻能玩,回原大区还是锁 → 服务器侧会话锁死。
  • 换手机热点/换网络后能重连 → 本地网络问题。
  • 关掉 Vanguard、Discord Overlay、Citrix、Comodo等所有和LOL 有关进程 后正常 → 本地进程冲突。
  • 同账号换电脑也锁,同电脑换账号正常 → 服务器侧会话锁死。
  • 同局其他人也掉 → 可能对局的服务器有问题。
  • 只有你掉,其他 9 人正常 → 你与服务器的会话/链路问题


总结来说 ,因为LOL的底层架构问题,会导致因各种情况导致断联后无法重连成功。如果频发,说明你本地诱因很多,要仔细排查一下(网络波动、进程崩溃、Vanguard 误判、加速器/NAT 异常、第三方软件冲突、游戏广告劫持等等),如果是偶发,临时解释一下也无伤大雅。
我也是被问的烦了才去研究了一番,搞维护嘛,能不动就不动,谋定而后动,大胆假设,小心求证,祝愿各位发财,不掉头发



我基本上就是让顾客大退游戏等5-10分钟就搞定了,游戏服务器问题没办法解决
您需要登录后才可以回帖 立即登录
高级模式
返回
统计信息
  • 会员数: 31881 个
  • 话题数: 11993 篇
  • 巅峰数: 12540 人