我是 Go 新手,并嘗試向多個(gè) http/https 服務(wù)器生成多個(gè)請求,以檢查每個(gè) Web 服務(wù)器的響應(yīng)時(shí)間和狀態(tài)。我將 URL 存儲在一個(gè)文本文件中,之后我決定在我的代碼中添加一個(gè)代碼,該代碼將在一定時(shí)間后繼續(xù)在每個(gè) URL 上生成這些請求(時(shí)間量以秒為單位在每個(gè) URL 旁邊鍵入并間隔一個(gè)標(biāo)簽)。當(dāng)我開始從文件中掃描時(shí)間時(shí),一切都變得復(fù)雜了,我無法找到我的錯(cuò)誤。這是我的 Go 代碼:package mainimport ( "fmt" "io/ioutil" "log" "net/http" "strconv" "strings" "sync" "time")func get_resp_time(url string) { //Get time for each URL time_start := time.Now() fmt.Println("Start time", time_start, " URL ", url) resp, err := http.Get(url) //fmt.Printf("resp : %#v \n", resp) if err != nil { log.Printf("Error fetching: %v", err) } defer resp.Body.Close() fmt.Println(time.Since(time_start), url, " Status: ", resp.Status)}func main() { content, _ := ioutil.ReadFile("url_list.txt") lines := strings.Split(string(content), "\t") //fields := strings.Split(string(content), "\t") //fmt.Println(lines[1]) //fmt.Println(strconv.Atoi(lines[0])) const workers = 25 var nb int wg := new(sync.WaitGroup) in := make(chan string, 2*workers) if _, err := strconv.Atoi(lines[1]); err == nil { nb, err = strconv.Atoi(lines[1]) } ticker := time.NewTicker(time.Second * time.Duration(nb)) for t := range ticker.C { fmt.Println("Time of origin: ", time.Now()) for i := 0; i < len(lines)-1; i++ { wg.Add(1) go func() { defer wg.Done() //for j := 0; j < len(in); j++ { if _, err := strconv.Atoi(lines[i]); err == nil { nb, err = strconv.Atoi(lines[i]) //get_resp_time(url) } else { get_resp_time(lines[i]) } //} }() } for _, url := range lines { if url != "" { in <- url } } fmt.Println("Tick at ", t) } close(in) wg.Wait()}和文本文件:http://google.com 5 http://nike.com 10 編輯:好吧,我只是將文件更改為只有一個(gè)持續(xù)時(shí)間,因?yàn)轱@然擁有多個(gè)持續(xù)時(shí)間非常復(fù)雜(根據(jù)我的項(xiàng)目顧問)。謝謝您的幫助!
- 1 回答
- 0 關(guān)注
- 310 瀏覽
添加回答
舉報(bào)
0/150
提交
取消