美文网首页
断线重连

断线重连

作者: 胖子罗 | 来源:发表于2019-07-14 21:25 被阅读0次

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

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

其次,重连主要步骤如下:
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,非常重要。

相关文章

  • 状态同步的断线重连

    最近陆陆续续在给游戏做断线重连相关的工作,大厅服的断线重连问题不是很大,难点主要在于战斗中的断线重连。断线重连要解...

  • 断线重连问题综述

    断线重连主要涉及到几个问题: 判定断线 怎么重连 重连后如何还原游戏环境 判定断线有两种方式,(1)是超时判定断线...

  • 断线重连

    今天看了下之前游戏登录相关逻辑,重新整理下断线重连的一些做法。 首先,介绍下断线的几种常见情况:情况一:客户端网络...

  • 断线重连

    using System; using System.Collections; using System.Coll...

  • Webscoket 断线重连

  • 定时断线重连

    客户端断线重连机制。客户端数量多,且需要传递的数据量级较大。可以周期性的发送数据的时候,使用。要求对数据的即时性不...

  • 蓝牙断线重连

    http://www.cocoachina.com/bbs/read.php?tid-1722597.html

  • .NET CORE SignalR Flutter 客户端

    依赖 例子 断线重连 automatic-reconnects-signalr

  • Jedis断线重连问题

    问题以及现象 前一阵子发现redis断线重连后,会出现类似如下的错误: 解决思路 socket write err...

  • websocket断线自动重连

    https://github.com/joewalnes/reconnecting-websocket 只需要简单...

网友评论

      本文标题:断线重连

      本文链接:https://www.haomeiwen.com/subject/fvmikctx.html