美文网首页Cocos2dx
游戏断线重连的处理方式

游戏断线重连的处理方式

作者: 凉拌姨妈好吃 | 来源:发表于2018-05-16 01:34 被阅读0次

手游因为网络不稳定所以断线重连非常重要!!!
以前在玩王者荣耀,游戏在后台,在进入前台的时候,发现可能是以加速的方式播放刚才在后台时的游戏录像,直到到达最近的点(这只是我的猜测)

断线重连触发的条件

1. 网络条件异常(如切换网络、或者当前网络不稳定),客户端会触发断线重连(此时客户端网络已经断开)
2. 网络延迟、网络链路异常等造成心跳包没有正常发送给服务器
这里可以有两种判断方法,一个针对服务端,一个针对客户端

  • 服务端已经超过了最大等待时间,所以主动断开连接,客户端需要主动触发重连
  • 客户端没有收到服务端对心跳包的返回包,认为掉线了,触发断线重连

3. 客户端切出游戏,客户端处于后台,超过一定时间服务端会主动断开与客户端的连接,客户端需要主动触发重连

断线状态机制

主要分为四个阶段

  • Start:网络正常
  • Wait:网络断开,等待网络恢复
  • Reconnect:重新连接
  • End:重新连接失败


    状态机制

断线有两种情况
  • 有收发的消息包丢失,重连后不会收到丢失的数据包
  • socket连接并没有断开,重连后会收到所有的数据包

设计断线重连需要考虑三方面
  • 安全性:重连不走正常登陆流程,是直连,所以无法保证连接过来的tcp是合法连接,所以要对连接做合法校验,保证直连过来的是正常客户端请求过来的,预防攻击
  • 超时处理:服务器不可能无限制等待客户端重连,需要设置超时时间,超过了等待时间,服务器应该清除缓存,客户端走登录流程
  • 数据包缓存:这里需要缓存没有发送成功的消息协议,客户端重连过来后,需要再次重新发送。
断线重连的安全性如何保证呢?

1.记录连接时的网络类型,切换至前台再获取一次网络类型,如果类型不一致就需要重新连接
2.记录建立连接的IP地址,切换至前台再获取IP。IP不同则需要重新连接。
这里会出现一些问题,就是当我们切换网络的时候,也会出现断线重连,因为wifi情况下的IP和4g情况下的IP是不同的(这个要怎么解决还是不懂,王者荣耀也有出现这种情况)


一个断线重连的设计

首先通信包的协议设计中,每个包头都包含一个叫pkgid的字段。
客户端的每个上行请求包(request)都有服务器与之一一对应的下行回复包(response),两者pkgid相同。
服务器的主动推送包pkgid=0。
客户端的实现:
客户端有一个队列,记录了已发送的request包,收到服务器的response后,再删除对应的request。
如果超时没有收到response,可以认为发生了断线,重新发送缓存的request,将pkgid设置为负标记为重传包。
重试有次数限制,如果超过次数仍然收不到回复,就提示断线,退出到登录界面。
服务器的实现:
服务器开一个缓存池,记录近期一定数量的response包和notify推送包。
当收到了重传包时,通过玩家id+pkgid,从缓存池里索引近期缓存的response包,缓存命中直接下发记录,没有命中则表示重传失败,服务器做踢线处理(踢线之后客户端会继续走登录流程)。


在做棋牌游戏,因为有托管玩法,所以当客户端断线时,用户就会进入托管状态,直到用户再次进入

相关文章

  • 游戏断线重连的处理方式

    手游因为网络不稳定所以断线重连非常重要!!!以前在玩王者荣耀,游戏在后台,在进入前台的时候,发现可能是以加速的方式...

  • 状态同步的断线重连

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

  • 断线重连问题综述

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

  • 网络游戏-断线重连

    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

网友评论

    本文标题:游戏断线重连的处理方式

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