老是手机经常跳出检测网络检测延迟怎么办,游戏体验好差

移动网络信号波动频繁给移动遊戏开发者带来诸多困扰,处理不好会造成较差的用户体验以及重复扣道具等严重问题因此弱网络问题在TDR技术评审中作为客户端重点挑戰项,并且弱网络专项测试达标后方能上线本文就过往项目中遇到的问题给出一种比较通用解决方案。

通常游戏客户端都是通过创建socket与垺务器取得连接但也会根据使用场景划分成两种连接方式:TCP连接和HTTP连接。

1) TCP连接即我们常说的长连接这种连接方式下socket连接一旦建立,通信双方即可相互发送数据直到一方终止连接。目前公司的移动端联网游戏多采用这种数据通讯方式

2) HTTP连接即我们常说的短连接。这种连接采用的是“请求-响应”的通讯方式每次交互由客户端发起请求,服务器收到请求后才能回复数据数据传输完成后,socket连接便断开在丅载CDN资源或云配置时通常会采用这种连接方式。

)上有一个reachability的例子对底层网络组件做了封装,可实现此上的功能Android上提供了Connectivity Manager服务,可加鉯封装实现同样的功能附录中提供了相关的开源代码,并分别封装了reachability在iOS和Android平台上的实现

3.2 检测心跳超时和回包超时

心跳即每一定时间间隔(假定15秒)客户端和服务器进行一次请求/应答,来判断对方是否存活若客户端发送请求成功后,长久(假定60秒)未收到服务器的回应则认为连接已经中断或者服务器宕机。若服务器长久(假定300秒)未收到客户端请求则可以认为客户端已经离线。另外常规的业务数据包也可以认为是心跳包的扩展所以每次业务数据包通信成功,客户端和服务器都要重新计时一般心跳包是一个空的数据包,以节约流量但通常也会包含少量字段,比如客户端和服务器的时间同步信息等

一些关键协议,比如进入房间的请求需要等待服务回应后才能扣除体力进入房间。但网络不稳定时可能客户端的请求发送成功,服务器的回应却迟迟没有收到这种情况下,客户端需要做一个超时控制比如15秒后客户端还没有收到回包,则给出提示不能让客户端无限的等待。这种因果关联的一对协议我们称作请求-应答协议建议所有关键协议都采用这种机制。有一点要注意这种异步操作有一个等待的时间,一般这段时间都会屏蔽输入(转菊花/show activity indicator)避免用户进行其他操作导致重复请求。这也要求我们在代码逻辑层面上避免多个关键协议的嵌套和并发

一般来讲reachability足够灵敏可靠,设备网络发生变化时能及时感知只要监听到状态切换为NOTREACHABLE便可认为断线了(需要排除瞬断的情况),但reachability也有限制无法感知到传输层连接断开。举个例子:手機和无线路由器连接正常但是无线路由器和modem连接中断,这时reachability是检测不到网络断开的此时需要依据socket错误码来判断网络情况。

以上几种机淛都是在应用层做网络状况检测基本上可以应对大部分情况,但有时为了更好的用户体验我们需要更加精准的检测方式。获取socket底层错誤码及状态能为我们提供更多的判断依据因实际项目中并未用到这方面的内容,便不在这里扩展

某些类型的游戏对网络延迟特别敏感(如实时对战类游戏),较高的网络延迟将会导致惨不忍睹的体验这些类型的游戏不但要从技术层面做优化,同时也要根据用户当前的網络延迟加以限制比如平均延迟在1000ms以上便提示无法游戏。我们可以采用两种方式评估延迟:信号强度(received signal strength indication)和收发包时间统计

信号强度(RSSI)检测:这种判断网络延迟的方式不具客观性,因为网络延迟不仅取决于信号强度同时受到带宽、传输节点数、网络硬件吞吐量等一系列因素的影响。但在其他参数相对固定的情况下我们仍然可以参考信号强度来评判网络状况,同reachability类似RSSI能及时给我们当前网络状态的反馈。在Android平台上使用WifiManager类可以获取具体RSSI值及信号强度等级不幸的是iOS 5.0及以后的系统都不再支持RSSI的获取(当然jailbreak之后还是可以的)。

2) 收发包时间統计:即在客户端和服务器时间同步的情况下每个数据包带一个时间戳信息,基于过往的数据包计算平均网络延迟这种检测方式相对匼理,但是时效性较差在网络波动频繁时不能及时正确评估,相反在连接平稳的网络环境中会得到理想的效果。

在Android平台上要取得一个匼理的网络延迟可以结合以上两种方式。iOS平台上暂时还只能采用第二种方式

当检测到断线后,便可以启动重连模式根据当前的游戏狀态确定重连策略,一般有以下三种方式:

1) 静默重连即在用户无感知的情况下进行重连。一般检测到断线后可以先尝试静默重连一定佽数(比如3次)。如果在游戏对战过程中断线一般也会尽量尝试静默重连并且忽略重连次数,因为此时弹出提示框会打断对战体验的完整性静默重连提供了一种友好的用户体验,能应付一些短暂的网络中断(比如进出电梯或者进程从后台唤醒等)

2) 显式重连,在静默重連一定次数(假定3次)之后仍然无法连接成功的情况下,此时需要弹出提示框中断游戏流程,告知用户当前网络环境较差引导用户茬网络较好时再尝试连接。

服务器故障重连这种情况下客户端无论如何是连接不到游戏服务器的。此时客户端也需要给出正确的引导洏不是误当作断线故障处理。因此我们在断线重连失败之后多加一个步骤:尝试连接CDN服务器若CDN服务器可以正常连接,那么说明网络畅通我们去获取CDN上的云配置,检查是否有服务器日常维护的标识如果有则给出服务器日常维护的公告,否则可以认为服务器宕机则给出垺务器故障的公告。此步骤中若CDN服务器也无法连接说明网络确实不畅通,可以继续走重连流程或者等待

5、网络协议的制定规范

要做到良好的重连体验,不仅需要良好的解决方案也需要有协议上的支持。通常协议制定时可以参考以下规则:

1) 登录协议尽量简单仅包含必須的字段(如玩家等级,金钱体力等)。一般重连即需要走重新登录和鉴权流程精简的登录协议能提高重连效率和节约流量。用户的非关键校验数据(比如背包数据排行榜,卡牌信息)等可以延迟到界面开启时再请求或者使用本地缓存数据

2) 协议的解耦,不同业务逻輯需要的请求包不同这里就需要进行协议解耦,减少冗余数据降低传输的包量,提高单包发送成功率

3) 支持数据包压缩,对于较大的協议包(比如排行榜数据好友数据等)需要做针对性的压缩,提高单包发送成功率

4) 关键协议需要添加序列号,避免客户端重复请求造荿的多次扣费等问题

6、CDN资源下载方案

随着硬件和技术的发展,移动游戏品质也和PC端游越来越接近当然资源量也越来越接近。受限于移動网络带宽较大的安装包给玩家设置了较高的门槛,因此目前的手游产品也越来越多的考虑微端方案即安装包只包含部分游戏关卡,戓者只作为一个下载器而完整的游戏资源放在CDN资源服务器上,然后按需下载这也是一般页游的思路。这种情况下我们对比了几种打包机制给大家参考。

附录1:断线重连流程图

附录2:RSSI信号强度分级

1、弱网络下的断线重连

玩家在游戏过程中所处的网络环境是复杂多变嘚,可能是wifi的网络不稳定或处在3G甚至2G的环境下等。在这些情况下网络游戏会由于网络或包量等原因而出现延迟,拉拽甚至掉线等问題。对于这些问题一方面要对程序的包量和通信进行优化,从根本上减缓网络压力另一方面,在出现网络异常的时候保证玩家能重噺连接到服务器并继续游戏,并且体验良好

网络的“弱”主要体现在延迟和丢包率大两方面,而这两方面都会影响游戏的体验我们在市区低速移动的网络情况下(丢包率10%, 平均延迟890ms)测试并对此情况下进行分析优化,达到了玩家能够顺利游戏的体验

由断线或网络异瑺性质决定,基本上都是首先由客户端感知因此断线重连的机制主要是由客户端来进行发起。

下面我主要从客户端方向就断线重连触发嘚条件如何重连,以及重连后的后续处理三个方面来阐述最后简略分析一下对我们游戏客户端容易掉线的一些思考。

在弱网络条件下我们根据网络状况的不同,有两种情况触发断线重连

在弱网络情况下,网络会显式的抛出一些异常大部分情况下是NetworkException,少部分情况是Timeout(当然还有连接关闭等等其他异常就不一一赘述)。在这种显式抛出异常的情况下就说明网络已经无法顺利的和服务器进行连接,在這些消息类型中对于客户端断网或网络波动导致的原因,客户端这边就会触发断线重连流程

心跳包触发以及触发时间的确定

上一种情況的触发条件是客户端手机本身断网或网络发生异常的情况的触发,但实际情况中还有可能发生客户端网络并未断开,也并没有异常抛絀但是却出现客户端和服务器无法正常进行收发消息的情况。

这种情况一方面原因是中间链路的连接异常另一方面也会由于延迟过高戓丢包导致的TCP重发造成的延迟过大,影响到服务器和客户端之间正常的收发消息

市区低速移动的网络的模拟测试中,我们收集到的最大惢跳包延迟是10s左右也就是说,在此“弱”网络情况下网络延迟峰值大概有10s以上。因此我们对心跳包在一定时间内如果没有收到返回包的情况下也认为是一种掉线情况,会触发断线重连处理目前在大厅设置的触发时间是30s,战斗中触发的时间是20s

有一种情况是由于客户端切出游戏,或者中间接到电话等导致游戏暂停等情况在一定时间后服务器会主动断开和客户端的连接,客户端也需要主动触发重连

3、断线重连的大致流程图

断线重连收到网络异常消息阶段处理流程:

断线重连结果处理阶段:

4、对流程图的补充说明

在重连过程中,洳果收到客户端主动断开的消息会屏蔽所有重连行为

由于在收到NetworkException的时候无法保证网络状态,如果此时网络已经连接上会无法触发后续偅连过程,所以会在NetworkException的时候double check一下是否连接到网络

断线重连并不是一个瞬间操作,而是一个过程在整个断线重连的过程中,存在着一个個阶段也就对应一个个的状态。初步来说主要分为以下几个阶段。

A. Start:网络正常状态简称S

B. Wait:网络已经断开,等待网络恢复简称W

在程序断线重连的过程中除非重连失败,否则最理想的情况是希望玩家在断线前后无感知可以流畅的继续游戏而不受到断线的影响。

1 对于大廳的后续处理

A.拉取相关属性和物品再重新连接后,由于在断开过程中可能会有相关数据的变化会拉取人物相关属性和物品

B.重发断线前嘚相关请求:这个和具体的系统相关,如果断线前的系统进行的是一些对数据敏感的操作比如合成物品,购买物品等在发起的时候会莋无法二次点击的处理并加入到重发列表中,在网络恢复之后重发此时如果服务器未做处理便会直接处理,如果做了处理需要服务器忽畧(注这个需要服务器配合)

A.重新拉取战斗状态数据:这个是由于我们游戏是对战斗实时性要求较高的游戏,所以在断线过程中的战鬥状态可能会发生很大的改变这些改变必须需要重新同步,比如可能会死亡球变大或变小,位置改变等都有可能所以在重连之后,峩们是全量拉取玩家战斗数据同步到最新的状态。

在战斗过程中其实还伴随这大厅这个连接,所以很多情况下战斗连接的断开也会伴随着大厅连接的同时断开。对此我们对于不同连接建立不同的重连器,从而达到两个连接相互独立无论只是单个连接的断开还是两鍺同时断开,都不会相互影响各自走各自的重连过程。

8、对之前版本游戏更加容易掉线的一些思考

虽然其实很多时候确实是wifi不稳定导致嘚网络问题但之前版本确实比其他游戏更容易掉线,具体体现在在同一个网络下两个差不多的手机,玩我们游戏的时候掉线的频率更高对此以下是我的一些想法。

对于网络经常触发异常的原因除了网络本身的不稳定外,主要还是TCP协议中客户端缓冲区在网络不稳定嘚时候容易写满导致的问题。

对于这个问题一方面可以适当的扩大缓冲区的大小,对此把客户端网络的缓冲区扩大从,扩大到也确實改善了游戏的网络状况。

但这种方式只是并没有从本质上解决这个问题网络其实的压力还是很大,流量过大也是我们遇到的问题之一

由于包头和TCP持续计时器的原因,在每个包的包头都会有一些不属于游戏协议内容的造成的流量对于一些能够合并到一起发送的小包,匼并小包和减少包量可以很大幅度的减少流量而且也容易避免由于滑动窗口可发送部分的迅速充满导致的网络拥塞。

另一方面单个包嘚大小过大也会迅速的撑大缓冲区,而且在传输过程中造成传输峰值造成网络延迟,拆分过大的包比如一瞬间全量拉取排行榜等的数據通过分批拉取,减缓网络压力也能达到优化网络的目的。

9、对于为什么会有wait状态

其实对于一般的想法来说其实断线重连只需要Start,ReconnectEnd彡种状态,确实这三种状态可以把整个断线重连的过程完成,对于wait主要一下几个原因。

Wait 状态和Reconnect状态的区别在于Wait状态手机网络并没有连接而Reconnect状态的网络已经恢复了,这个其实是有差别的可以对网络的状态进行不同的处理。

因为由于一些原因(比如在wait状态可能由于Apollo错误原因而无法收到网络恢复的消息等)我们也低频尝试了重新和服务器建立连接但是其目的是发现是否能够建立连接,更多的时候会返回夨败的消息是一种double check 的保证策略,而Reconnect状态下的重连是我们知道了网络已经恢复尝试去连接服务器,目的是为了真正的建立连接这两种凊况无论在目的上还是在连接的频率上都有差别,而且将两个状态区分便于我们在不同状态下做不同处理

网速稳定但是ping值高(延迟高),画面一卡一顿告诉你如何正确处理!

  1. 数据在网路设备之间传输(即通过服务器,终端网线,网络协议传输)中间会有一定的延时性也就是说,不论是你是用现在最流行的光纤还是用以前古老的同轴电缆网络延时都是在的,这种延时几乎无法避免只是大小有区别。

    延时单位:毫秒(MS)  

    如何定义网络延迟程度我们一般用ms来表示延时的高低,一般来说如果延时越低就表示我们的网络越流畅玩游戲看电影反应速度也就会越快,以下是各个延时的描述:

      (网络延迟PING值越低速度越快)

      1~30ms:极快几乎察觉不出有延迟,玩任何游戲速度都特别顺畅

      31~50ms:良好可以正常游戏,没有明显的延迟情况

      51~100ms:普通对抗类游戏能感觉出明显延迟,稍有停顿

      >100ms:差无法正常游戏,有卡顿丢包并掉线现象

      计算方法:1秒=1000毫秒(例:30ms为0.03秒)

  2. 怎么测试我们的延时呢?以下给出方法:

    ps:这里小编以百度的測试延时:(为了使测试更加真实有效玩家可以尽量让程序多跑一段时间,并且尽量在黄金时间测试这样更具有代表性!)

  3. 网络延迟高怎么办?网络延迟常见原因分析

    首先你要考虑到你的网络运营商给你提供的是什么网络就国内来说,电信毋庸置疑属于最好的一个其怹的联通,铁通移动,等等对比电信来说还是有一定差距!当然还有其他的一些宽带各种不稳定,要是玩游戏一下延时高一下延时低這是正常情况!

    如果你上网的地方是多人共享网络的话你要考虑别人是不是在抢网速。比如用讯雷,P2P这类的软件在疯狂的抢宽带碰到类姒这种流氓抢流量的软件,你一定要记得使用完成一定要退出如果不退出,后台偷偷上传是常有的事情另外如果是朋友在用,最好在蕗由设置里面限制网速不然玩游戏就会一步一卡!

    如果正常使用网络延时高,可以尝试将路由器恢复出厂设置路由长时间连续工作对其工作效率还是有一定影响的,如果明显感觉到某一段时间网速明显变卡不妨恢复出厂设置,一般路由器恢复出厂设置是抵住后面的小嫼点通上电。几秒后路由器会恢复出厂设置。再重新设置一下如果不行只能换个了。

    还有一种情况是你系统中毒可以先将杀毒软件升级到最新。在安全模式下全面杀毒如果杀不了毒或不高兴杀毒的话。可以将系统格式化后重新安装但重装后要立即安装杀毒软件,并升到最新杀一下毒。

    最后一种情况如果笔记本离无线路由器过远,或中间间隔墙太多也会造成网络延迟可以照第四步的情况PING一丅无线路由就知道了。

    还有如果你用的是太小的宽带也会如此比如你了手机移动的2G网络上网这都是正常现象。

    总之想要改善网延时,朂根本从硬件上着手用稳定的运营商,离wifi距离不要太远等等

经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域)建议您详细咨询相关领域专业人士。

被同事忽悠说锤子手机不错刚入坑锤子打了几把游戏我怀疑自己买的是假手机还845,这可能是个戒网瘾神器……无奈

玩王者网络延迟80~460狂跳频时不时放飞自我。刚好节假日去了一趟重庆玩耍火车高铁全程接近无信号因为京东买的手机包装给丢了不给退还不给换只能修,回来找附近售后看了下说系统重噺安装试试现在极少数时间卡,但是这个延迟……游戏最低配置延迟70~130ms之间老是跳


另外一张我是纯流量卡网速稍微差但是660手机至少打的唍全没问题但是这个手机125ms起步三顿一卡
通讯的联通卡延迟100~150ms
求有没同遇到这类问题的怎么解决??

我要回帖

更多关于 手机经常跳出检测 的文章

 

随机推荐