移动平台游戏网络优化方案

目标

  1. 对程序的包量和通信进行优化,从根本上减缓网络压力
  2. 在出现网络异常的时候,保证玩家能快速重新连接到服务器并继续游戏,并且体验良好

重连条件

  1. NetworkException,Timeout 在这种显式抛出异常的情况下,就说明网络已经无法顺利的和服务器进行连接,在这些消息类型中客户端这边就会触发断线重连流程
  2. 但实际情况中,还有可能发生客户端网络并未断开,也并没有异常抛出,但是却出现客户端和服务器无法正常进行收发消息的情况,这种情况一方面原因是中间链路的连接异常,另一方面也会由于延迟过高或丢包导致的TCP重发造成的延迟过大,影响到服务器和客户端之间正常的收发消息,因此,对心跳包在一定时间内如果没有收到返回包的情况下也认为是一种掉线情况,会触发断线重连处理
  3. 客户端切出游戏,或者中间接到电话等导致游戏暂停等情况,在一定时间后服务器会主动断开和客户端的连接,客户端也需要主动触发重连(服务器保持连接的时间尽可能长

技术方案

  1. 客户端网络的缓冲区扩大,TCP协议中,客户端缓冲区在网络不稳定的时候容易写满导致的问题
  2. 减少,压缩数据包,合并小包和减少包量可以很大幅度的减少流量。而且也容易避免由于滑动窗口可发送部分的迅速充满导致的网络拥塞
  3. 单个包的大小过大也会迅速的撑大缓冲区,而且在传输过程中造成传输峰值,拆分过大的包,减缓网络压力,也能达到优化网络的目的
  4. 检测心跳超时和回包超时,心跳即每一定时间间隔(假定15秒)客户端和服务器进行一次请求/应答,来判断对方是否存活
  5. 检测socket状态
  6. 增加重连次数统计和重连成功次数统计上报

体验优化

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

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

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

参考

某百万大作的弱网处理及断线重连方案
弱网络环境下手游断线重连和协议重发方案
移动平台游戏网络重连方案
手机客户端弱网络下的断线重连处理

你可能感兴趣的:(cocos)