目标
- 对程序的包量和通信进行优化,从根本上减缓网络压力
- 在出现网络异常的时候,保证玩家能快速重新连接到服务器并继续游戏,并且体验良好
重连条件
- NetworkException,Timeout 在这种显式抛出异常的情况下,就说明网络已经无法顺利的和服务器进行连接,在这些消息类型中客户端这边就会触发断线重连流程
- 但实际情况中,还有可能发生客户端网络并未断开,也并没有异常抛出,但是却出现客户端和服务器无法正常进行收发消息的情况,这种情况一方面原因是中间链路的连接异常,另一方面也会由于延迟过高或丢包导致的TCP重发造成的延迟过大,影响到服务器和客户端之间正常的收发消息,因此,对心跳包在一定时间内如果没有收到返回包的情况下也认为是一种掉线情况,会触发断线重连处理
- 客户端切出游戏,或者中间接到电话等导致游戏暂停等情况,在一定时间后服务器会主动断开和客户端的连接,客户端也需要主动触发重连(服务器保持连接的时间尽可能长)
技术方案
- 客户端网络的缓冲区扩大,TCP协议中,客户端缓冲区在网络不稳定的时候容易写满导致的问题
- 减少,压缩数据包,合并小包和减少包量可以很大幅度的减少流量。而且也容易避免由于滑动窗口可发送部分的迅速充满导致的网络拥塞
- 单个包的大小过大也会迅速的撑大缓冲区,而且在传输过程中造成传输峰值,拆分过大的包,减缓网络压力,也能达到优化网络的目的
- 检测心跳