Я запускаю небольшой клиент в Go. На данный момент мы получаем несколько ложных тревог, которые, похоже, доходят до client.Do()
, возвращая ошибку EOF, когда num>=1000
.Голанг HTTP Параллельные запросы POST EOF
Это суть моего кода:
func DoCreate(js string, cli *http.Client) {
url2 := "http://xvz.myserver.com:9000/path/create"
postBytesReader := bytes.NewReader([]byte(js))
request, _ := http.NewRequest("POST", url2, postBytesReader)
resp, err := cli.Do(request)
if err != nil {
fmt.Println(err) // Post http://xvz.myserver.com:9000/path/create: EOF
return
}
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
defer resp.Body.Close()
}
func main() {
client := &http.Client{
CheckRedirect: nil,
}
for i := 0; i < num; i++ {
var pq CreateReqInfo
pq.Uid = strconv.Itoa(bid + i)
petstr, _ := json.Marshal(pq)
go DoCreate(string(petstr), client)
}
}
Проблема о количестве дескрипторов файлов или макс соединений?
В какой ОС вы работаете? – fredrik
Возможно, вы захотите изменить свой параллелизм, чтобы у вас был фиксированный набор goroutines, которые сотрудничают для завершения работы.На данный момент вы разворачиваете ряд горуций, равный общей сумме работы, которая может быть немного переборщицей. См. «Рабочие пулы»: https://gobyexample.com/worker-pools – dyoo
Я проверю стабильность моего сервера. поэтому я хочу анализировать данные, когда сервер работает под высоким давлением. os is centos ~~ – nemo