断线重连

今天看了下之前游戏登录相关逻辑,重新整理下断线重连的一些做法。

首先,介绍下断线的几种常见情况:
情况一:客户端网络不好
情况二:客户端网络切换
情况三:心跳超时等原因被服务器断开
情况四:客户端程序切后台
不管哪种情况,反正都是客户端知道自己断开了,所以需要发起断线重连。

其次,重连主要步骤如下:
1)客户端记录了断线之前服务器IP,尝试连接并发送重连协议;重连协议是和正常连接登录协议不一样的;
2)服务器收到重连协议,会做一些安全检查、超时检查,判断是否可以重连;
3)如果可以重连,服务器会根据客户端找到之前旧用户所在的服务器当前的状态信息,然后下发
4)客户端拿到最新状态更新本地数据和状态,继续游戏

最后,可能会有如下疑问:
问题1:服务器如何校验重连客户端的?
重连其实也是需要使用到客户端之前登录成功后拿到的token,服务器通过这个token验证是否合法。服务器也可以进一步验证网络类型、ip、包序号等信息。

问题2: 重连是怎么找到之前用户所在的逻辑服务器的?
一般来说重连连接的是网关服务器,网关服务器会保存一个sessionMap,记录用户所连的游戏逻辑服务器,所以通过这个sessionMap就能找到所在的游戏服务器。

问题3:服务器是如何处理重连协议的?
除了上面提到的对token验证之外,服务器会对玩家一些状态更新,比如断线状态切换为上线;同时可能将玩家登录、上线、进入房间或副本的整个流程涉及的数据进行整合更新然后下发;其实就是要让玩家恢复到断线这段时间的最新状态。

问题4:重连和心跳的关系?
1)心跳超时会触发重连:心跳在某种程度也是判断客户端和服务器是否正常通信的一种机制,心跳超时了说明客户端和服务器通信异常,所以需要重连;
2)一般重连后会重新初始化心跳周期计时。

问题5:重连失败怎么处理?
重连失败会有重试机制,如果在默认自动重试次数后依然失败,此时会提示客户端是否需要手动重试;继续失败N次会直接跳回登录界面,走重新登录流程。

问题6:重连会不会可能受到负载均衡影响连接到别的服务器?
重连连接的是之前分配好的网关服务器,实际已经指定服务器,所以不受负载均衡影响;你可能担心那如果这个网关服务器当前已经负载很高了,那么不应该再重连这台网关;一般负载均衡会考虑将一段时间内断线的用户依然算作负载人数的,所以这部分断线用户已经考虑在内;另外服务器也会弹性留一部分负载的。

问题7:大规模断线重连可能什么原因导致的?
1)第一时间想到可能是服务器重启了或者服务器网络出问题了
2)可能是服务器负载高,处理不过来
3)某个逻辑功能bug

问题8:断线重连需要做监控吗?
需要;断线重连也是一种行为,可以记录到玩家行为日志,定时统计分析。通过查询和对比断线重连数据能及时发现一些异常情况或bug,非常重要。

你可能感兴趣的:(断线重连)