最近app的一次版本上线以后出现4g网络下请求接口特别慢,第一次调用接口非常非常慢或者直接访问失败,后面就正常了,但是WiFi情况下并不会出现这个问题。最主要的是IOS的线上app并没有问题。
开始怀疑是项目本身的网络框架太老(httpclient)导致的,所以把几个地方换成了OKHttp,换完之后问题依然存在,所以排除了网络框架的可能性。
开始查资料,原来有很多同学遇到过相关问题,导致此问题的可能性总结下来无非以下几点:
1、后台服务器有2种解析方式,分别是ipv4和ipv6。android 默认是不支持ipv6的,但是苹果是支持的,如果要让android支持ipv6需要root。
2、tcp_timestamps导致包被抛弃,客户端改这个参数要root,需要将服务器的net.ipv4.tcp_timestamps设置为0。
在linux中如果是tcp_tw_recycle被打开了话,会假设对端开启了 tcp_timestamps,然后会去比较时间戳,如果时间戳变大了,就可以重用。tcp_timestamps记录的是从开机到现在所经过的秒数,tcp_tw_recycle在开启后会比较同一公网ip下的tcp_timestamps,所以在同一wifi下,在第一次SYN的时候,tcp_timestamps如果比其他设备的tcp_timestamps小的话,包就直接被丢弃。
By LiYing