这几周一直在优化cocos移动端在弱网络环境下的问题
因为历史原因,使用的是TCP连接和传统的序列化反序列化解析
因为基于TCP,所以网络环境的变化,会导致Socket层无任何异常,无法得知断开了,IOS因为待机也会断网,所以更甚
简单说一下处理的几个步骤吧
1、增加了服务器的心跳和心跳返回,这是最基本的,通过心跳的超时来判断是否断开了
2、增加java层和Oc的监听网络切换或者网络发生变化,java使用JNI,Oc是混编,获取到切换或者网络断开了,立刻主动断开Socket并且走断线重连
3、每次网络发生变化,本地ping服务器js脚本,选择分布式中最快的那个ip在缓存中,连接时候选择最快的那个服务器连接,也就是简单的负载均衡
4、游戏内针对所有的异常情况,超时情况,协议收到的解析出错或者丢包现象做了判断,也是走断线重连机制
5、优化断线重连机制,速度一定要快,立刻反映立刻连接,和服务器的连接要快哟
6、根据包头的while循环判断是否是持续空包,判断断线
其实游戏闪退都没有断开连接卡死要好,弱网络断开了就没反映了是很傻的....所以一定要优化好!