动态

详情 返回 返回

Initial connection超時接口無法正常請求Status canceled - 动态 详情

問題描述

最近上了一版需求,其中有一個接口因為後端的計算量超級巨大,導致接口時間要達到七八秒才能返回對應結果。

上了生產環境以後,請求總是失敗。

測試環境是好好的...

查看控制枱請求發送的報文相關信息如下:

筆者看一下報文,發現請求的狀態從開始的pending等待到最後的canceled取消。

點開請求的Timing面板查看,發現請求卡在Connection StarInitial 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 // 給予接口足夠的時間
})

這樣設置以後,發現,問題解決

第一張圖是失敗的超時取消的請求,再附上一張成功的不超時的請求

user avatar linlinma 头像 u_17470194 头像 baqideyaling 头像 asmallwhitecat 头像 zohocrm 头像 beverly0 头像 lu_lu 头像 xcgaoshi 头像 wqjiao 头像 gaoxingdeqincai 头像 zxl20070701 头像 piaoyidebanma 头像
点赞 13 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.