php小編新一今天為大家介紹一款名為“http客戶端:無網(wǎng)絡(luò)時更快的超時”的工具。在網(wǎng)絡(luò)不穩(wěn)定或無網(wǎng)絡(luò)環(huán)境下,超時時間過長可能會導(dǎo)致用戶體驗不佳。而這款http客戶端工具可以幫助解決這個問題,它通過優(yōu)化超時機制,使得在無網(wǎng)絡(luò)的情況下,超時時間更加快速,從而提高了應(yīng)用的響應(yīng)速度和用戶的體驗。讓我們一起來了解一下這款工具的具體功能和使用方法吧!
問題內(nèi)容
當(dāng)在 go 中發(fā)出 http get 請求時,即使沒有網(wǎng)絡(luò)連接,它也會在返回錯誤之前等待完整的超時時間。
我認為在內(nèi)部它很快就知道它失敗了;我希望該錯誤盡快傳播,而不是等待超時時間。我確實希望它在網(wǎng)絡(luò)存在但速度很慢時嘗試 20 秒。我如何設(shè)置具有這種行為的客戶端?
查看問題的代碼:
var client = &http.Client{ Timeout: time.Second * 20, } response, err := client.Get(url)
登錄后復(fù)制
如果重要的話,我正在使用 gomobile 并且它在 ios 模擬器上運行。
解決方法
這里的答案非常簡單:golang 內(nèi)部可以并且確實知道何時沒有網(wǎng)絡(luò),并及時傳播故障,而無需等待 20 秒超時。網(wǎng)絡(luò)上不會發(fā)送任何內(nèi)容,也無需等待。 Go 似乎一切正常,并且不需要對示例代碼進行任何更改。
該問題仍然會持續(xù)重現(xiàn),但僅限于 iOS 模擬器。這似乎是一個特定于 iOS 模擬器如何將連接映射到主機操作系統(tǒng)的問題。不確定這是一個長期存在的問題,還是我的 MacOS/模擬器配對中的一次性問題。在主機 MacOS 和真實 iOS 設(shè)備上,它可以正常工作,當(dāng)沒有網(wǎng)絡(luò)接口時,它會立即超時。
不需要額外的請求,因為這只是得出相同結(jié)論的另一條途徑,這增加了其他失敗的可能性??赡苡兄趨^(qū)分網(wǎng)絡(luò)問題與特定服務(wù)的問題,或者更快地獲得真實網(wǎng)絡(luò)狀態(tài)的指示器(在連接的網(wǎng)絡(luò)接口存在之后)。