Что произойдет, если число соединений keep-alive достигает MaxIdleConns в http-транспорте Golang - PullRequest
0 голосов
/ 19 октября 2018

У меня есть несколько вопросов при использовании http.Transport для настройки http-клиента

Предположим, у нас есть MaxIdleConns=10, MaxIdleConnsPerHost=2, пять разных хостов, каждый из которых имеет два соединения keep-live, и это означает числосоединений достигают MaxIdleConns.

  1. Что будет делать клиент, когда потребуется новое соединение, целевым хостом которого может быть один из пяти хостов?
  2. Что будет делать клиент, когда потребуется новое соединение с другим хостом?

Кстати, если у меня есть сервер, использующий http.ListenAndServe, как его настроить, например, когда закрывать keep-live соединения?Я был бы признателен, если бы были какие-либо примеры кодов.

1 Ответ

0 голосов
/ 19 октября 2018

Если вы используете HTTP-клиент Go по умолчанию, он выдаст ошибку "too many open files error", когда вы достигнете максимального предела соединения во время высокочастотных вызовов API.Это происходит потому, что HTTP-клиент по умолчанию не закрывает соединения после создания.Чтобы решить эту проблему, вы должны создать собственный HTTP-клиент и установить интервал ожидания.

var netTransport = &http.Transport{
  Dial: (&net.Dialer{
    Timeout: 5 * time.Second,
  }).Dial,
  TLSHandshakeTimeout: 5 * time.Second,
}
var netClient = &http.Client{
  Timeout: time.Second * 10,
  Transport: netTransport,
}
response, _ := netClient.Get(url)

Для получения более подробной информации перейдите по этой ссылке, перейдите по этой ссылке https://medium.com/@nate510/don-t-use-go-s-default-http-client-4804cb19f779

...