zoukankan      html  css  js  c++  java
  • 断线重连

    以下纯属理论,无实践
    1,后端定时向前端发心跳包(每次序列号加1),后端收到后回复一个,如果前端或后端在3秒内未收到心跳,则认为网络状况差,停止发送/接收游戏数据,继续发心跳包进行网络测速,直到网速达标(适用于对战类游戏,如王者荣耀),或者提示网络状态不佳,断开连接(MMORPG),
    这种情况下的断线,不进行重连,但这是断线重连的基础。
    这种情况下,再次重连时不会有数据丢失,可以继续上次数据发送
    2,突然性网络断开,异常被捕获后,前后端都立即知道了网络断开
    断开之前可能有一些数据已经从后端发出,还未到达前端,前端断开连接后,数据到达不了前端,丢失了,
    前后端开始断线重连处理:前端每隔1秒向后端发送一次连接请求,直到连接上,若尝试10次仍不能连接上,提示服务器无法连接,请检查网络状况。
    连接上的,服务器知道这是断线的重连,因为断开时服务器已经记录下了玩家ID,
    此时,服务器向前端下发一个断线重连的回复数据,数据中有序列号,前端拿这个序列号与前端序列号对比,若后端大于前端,则知道断线之后发生了丢包,然后把当前序列号发给后端,
    后端将自己的序列号与前端发来的序列号对比,如相等,则一切正常。若不等(一定是小于,不可能大于)
    则去缓存中去取缓存的协议数据,从前端的序列号开始处重新发送给前端。
    这样当玩家重连成功后,服务就会将玩家断线期间周围玩家的走路广播,以及断线前玩家的请求的回复数据(比如买了某个物品,刚点击了物品)重新下发,像魔兽世界就是这样的,断线后重新成功,会看到一个急速的动画播放,这就是后端在急速补包,前端做了加速表现。

  • 相关阅读:
    VFP正则表达式判断是否是手机号码/电子邮件
    VFP自定义函数StringFormat (仿.NET String.Format 方法)
    解决SOAPCLIENT访问WebSerivce外网发布端口
    VFP调用SOAPTOOLKIT 低级API
    经典的Hello World VFP前端调后端C# Webservice
    VFP不同句柄 同一事务处理 统一提交或回滚
    C++文件(夹)选择对话框操作
    Linxu之rz和sz命令
    测试标题
    自定义Silverlight TextBox 具有下拉框提示控件
  • 原文地址:https://www.cnblogs.com/timeObjserver/p/9493042.html
Copyright © 2011-2022 走看看