博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
断线重连
阅读量:6006 次
发布时间:2019-06-20

本文共 728 字,大约阅读时间需要 2 分钟。

以下纯属理论,无实践

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

转载于:https://www.cnblogs.com/timeObjserver/p/9493042.html

你可能感兴趣的文章
nextus的使用
查看>>
Python自动化开发学习5-2-subprocess模块
查看>>
编程实现最小化窗口到桌面右下角图标的代码
查看>>
ELK stack实战之结合rsyslog分析系统日志(auth.log)
查看>>
我的IP我做主--抓包图解DHCP中继代理
查看>>
网络管理工具与IT运维管理平台的差别
查看>>
五一期间安全回顾 木马威胁提升 移动设备数据泄漏受重视
查看>>
FAQ系列 | utf8表存储latin1乱码字符转换
查看>>
VDI序曲二十 桌面虚拟化和RemoteApp集成到SharePoint 2010里
查看>>
oracle里long类型的总结
查看>>
10种有用的CSS技巧
查看>>
服务端接口中的那些坑
查看>>
MySql like 查询 变向写法(不用like 完成like查询)
查看>>
Struts 笔记
查看>>
《C++面向对象高效编程(第2版)》——2.2 对象接口的重要性
查看>>
五个 ping 工具的使用实例
查看>>
在Linux系统下玩《炉石传说:魔兽英雄传》
查看>>
阿里数据库内核月报:2016年01月
查看>>
Samba 系列(七):在 Samba AD DC 服务器上创建共享目录并映射到 Windows/Linux 客户...
查看>>
The Joy of Clojure – Clojure philosophy(1)
查看>>