问题形容
最近上了一版需要,其中有一个接口因为后端的计算量超级微小,导致接口工夫要达到七八秒能力返回对应后果。
上了生产环境当前,申请总是失败。
测试环境是好好的...
查看控制台申请发送的报文相干信息如下:
笔者看一下报文,发现申请的状态从开始的pending
期待到最初的canceled
勾销。
点开申请的Timing
面板查看,发现申请卡在Connection Star
的Initial connection
中央不往下走了。
Initial connection
是建设TCP连贯的意思,笔者不禁考虑,为啥好好的申请,TCP连贯连不上了啊,也是一脸懵。
于是,笔者去百度如何解决Initial connection
过慢失败问题,发现网上的帖子七嘴八舌,如:可能是一个域名下挂着两个ip
、如:可能是域名解析DNS问题之类的等...
与此同时,后端共事也在看如何优化本人的接口,让接口返回疾速一些...
前后端就这样各自钻研了一下午。
解决方案
其实一开始方向就错了,不应该看Initial connection超时
就认为是什么环境域名导致TCP连贯不上(公司测试环境是ip
生产环境是域名
),导致TCP
连贯不上的起因有很多。
其中有一点就是前端限度了超时工夫
,导致了TCP
没工夫去进行连贯、去进行三次握手四次挥手,所以最终的解决方案是:
前端放开超时工夫axios
中的timeout
超时工夫限度
既然这个申请会达到七八秒,那么这个就将超时工夫设置为16秒,这样的话,工夫足够用了。
import axios from "axios";const http = axios.create({ timeout: 16000 // 给予接口足够的工夫})
这样设置当前,发现,问题解决
第一张图是失败的超时勾销的申请,再附上一张胜利的不超时的申请