第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么 HTTP 請(qǐng)求總是需要與完全超時(shí)一樣長(zhǎng)的時(shí)間?

為什么 HTTP 請(qǐng)求總是需要與完全超時(shí)一樣長(zhǎng)的時(shí)間?

Go
GCT1015 2023-08-14 15:02:50
我正在制作一個(gè) _golang git bruteforcer。它的行為有點(diǎn)奇怪,我想這與并發(fā)有關(guān)。?sync.WaitGroup這是代碼:package mainimport { <snipped for brevity> }// ReadFile : Reads File and returns it's contentsfunc ReadFile(fileName string) []string { <snipped for brevity> }func joinString(strs ...string) string { <snipped for brevity> }// MakeRequest : Makes requests concurrentlyfunc MakeRequest(client *http.Client, url string, useragent string, ch chan<- string, wg *sync.WaitGroup) {? ? defer wg.Done()? ? // start := time.Now()? ? request, err := http.NewRequest("GET", url, nil)? ? if err != nil {? ? ? ? fmt.Println(err)? ? ? ? return? ? }? ? request.Header.Set("User-Agent", useragent)? ? response, err := client.Do(request)? ? if err != nil {? ? ? ? return? ? }? ? // secs := time.Since(start).Seconds()? ? if response.StatusCode < 400 {? ? ? ? // fmt.Printf("Time elapsed %f", secs)? ? ? ? bodyBytes, err := ioutil.ReadAll(response.Body)? ? ? ? if err != nil {? ? ? ? ? ? log.Fatal(err)? ? ? ? }? ? ? ? defer response.Body.Close()? ? ? ? bodyString := string(bodyBytes)? ? ? ? notGit, err := regexp.MatchString("<html>", strings.ToLower(bodyString))? ? ? ? if !notGit && len(bodyString) > 0 { // empty pages and html pages shouldn't be included? ? ? ? ? ? fmt.Println(bodyString)? ? ? ? ? ? ch <- fmt.Sprintf(" %s ", Green(url))? ? ? ? }? ? }}在職的 :它從文件中讀取 url 并/.git, /.git/HEAD, /.git/description, /.git/index在網(wǎng)絡(luò)服務(wù)器上進(jìn)行檢查。問題:?如果我將http.Client超時(shí)更改為2 seconds它將在 2 秒內(nèi)完成,如果是 50 秒它將等到 50 秒,輸入文件是否包含 10 個(gè) url 或 500 個(gè) url 并不重要。我的理解是,如果有更多的 url,它將等到 goroutine 傳遞的最后一個(gè) URL 超時(shí)。
查看完整描述

1 回答

?
達(dá)令說

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個(gè)贊

在代碼中,您從文件中讀取 URL,然后并行觸發(fā)所有這些 URL 的請(qǐng)求,然后等待所有并行請(qǐng)求完成。

所以這實(shí)際上是有道理的,并不表明存在問題:

如果我將 http.Client 超時(shí)更改為 2 秒,它將在 2 秒內(nèi)完成,如果是 50 秒,它將等到 50 秒,輸入文件是否包含 10 個(gè) url 或 500 個(gè) url 并不重要。

假設(shè)您的文件有 500 個(gè) URL。

您并行觸發(fā) 500 個(gè)請(qǐng)求...然后等待所有請(qǐng)求完成(請(qǐng)記住,它們都是并行執(zhí)行的)。那需要多長(zhǎng)時(shí)間?

在最壞的情況下(所有請(qǐng)求都在 50 秒超時(shí)),總共只需要 50 秒(因?yàn)樗鼈兌荚诓⑿械却@ 50 秒)。

在最好的情況下(所有請(qǐng)求都成功通過且沒有超時(shí)),應(yīng)該需要幾秒鐘。

在一般情況下,您可能會(huì)看到(在 50 秒處出現(xiàn)幾次超時(shí)),然后需要 50 秒(在最壞的情況下,您將等待這幾個(gè)請(qǐng)求并行等待這 50 秒)。


查看完整回答
反對(duì) 回復(fù) 2023-08-14
  • 1 回答
  • 0 關(guān)注
  • 145 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)