Unity手游开发:弱网处理

前置机制实现:

  1. 前端维护递增的RequestId,并缓存后端返回的最新ResponseId。
  2. 后端给前端返回数据包时维护递增的ResponseId,并将ResponseId和对应的返回数据缓存到队列中,以RequsetId进行索引。

主要解决以下弱网问题:

  1. 回包同步:发包一定时间后若无回包则禁止点击屏幕,防止多次操作;当发包仍然未回包超过某个时间后,则出现等待回包的黑底界面;当发包仍然未回包超过某个时间后,则出现提示玩家进行重试的提示界面。

  2. 超时重试:点击重试后将重新发送之前超时的包。为了避免多次重复发包导致后端重复处理(可能引起多次资源扣除或者异常报错),前端进行重试时使用之前的RequestId,后端收到已存在的RequestId则从缓存中取出之前的回复内容而不重复进行逻辑处理,若缓存中取不到则当成正常请求处理。

  3. 网络重连:玩家进行连续2次重试后则第3次重试将会重建Socket并进行游戏重连操作,连续2次重建失败则会踢出游戏。而从网络异常到游戏重连成功期间可能导致丢包,当前端进行重连时附带前端收到最新的ResponseId,后端根据收到的ResponseId判断前端丢掉了多少包,并在重连回包中从缓存中取出进行补发,若缓存中取不到则报错踢出游戏告知掉线。

  4. 后台返回:游戏切到后台后游戏可能会被暂停,在游戏暂停时网络模块将正常接收数据并缓存,但是不进行逻辑层的分发,会在游戏恢复时一起分发。在游戏切回前台后要发个心跳包进行网络状态检测,会有3种情况:1.心跳包正常返回,代表网络正常,不进行任何处理。2.检测心跳包返回报错,这时一般是玩家切后台太久被后端认定为掉线(此时后端不再缓存玩家数据包),需要踢出游戏。3.socket抛出异常断开连接/检测心跳包超时,认定为网络断开(一般安卓开了省电策略会禁用后台网络导致断开),此时进行重连,走重连逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值