uniapp显⽰服务器请求超时,Uni-APPAndroid⽹络超时的原因
和解决办法
⽹站的Android应⽤向服务器发送请求时,经常出现⽹路超时的现象,⽽IPhone应⽤却⼀切正常。
起初怀疑是我们Android应⽤中的BUG,但在排查过程中发现,通过Andorid浏览器访问⽹站的WEB页⾯同样会出现⽹络超时的问题。
这⼀发现让我们将排查的对象转移到服务器的配置上。最后确定问题的原因是我们将tcp_tw_recycle和tcp_timestamps同时打开了。
之前我们为了服务器性能优化,在nginx所在的机器上修改了内核的tcp设置,开启了tw_reuse和tw_recycle。
网络连接被重设p_tw_reuse = 1
p_tw_recycle = 1
tcp_timestamps在CentOS中默认是打开的。
在linux内核中,如果tcp_tw_recyle和tcp_timestamps同时开启,内核会要求在60内同⼀源发出的tcp请求的timestamp是递增的。NAT 下的机器共享同⼀个对外IP,每个机器的timestamp是随机⽣成的,这就导致当NAT下多个client同时访问服务器时,timestamp⼤的client能获得响应,⽽其他client被拒绝。
可是为什么IPhone应⽤不受这⼀限制呢?
原因是tcp_timestamp在IPhone中默认是关闭的,在Android系统中默认却是开启的。
解决办法:将p_tw_recyle设为0, sysctl -p。
重设之后,该问题解决。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论