Зачем нам запускаться при использовании net / http? - PullRequest
0 голосов
/ 21 ноября 2018

Если я использую:

uri = URI("...")
http = Net::HTTP.new(uri.host, uri.port)
http.read_timeout = 60
# Add http.start here? Why?
for i in 1..n
    uri = getFullUri()
    req = Net::HTTP::Get.new(uri.path)
    resp = http.request(req)
end

все работает нормально.

Почему мне нужно добавить http.start?

Я вижу, что http.started? возвращаетfalse везде, если я не добавлю http.start, но оказывает ли это отрицательное влияние?

В чем разница между этими двумя случаями?

Количество соединений TCP илиHTTP сессии различаются?

1 Ответ

0 голосов
/ 21 ноября 2018

http.start() откроет TCP-соединение в тот момент, когда оно было вызвано.Он автоматически вызывается http.request(), если он еще не был вызван.Вот первые несколько строк метода request:

def request(req, body = nil, &block)  # :yield: +response+
  unless started?
    start {
      req['connection'] ||= 'close'
      return request(req, body, &block)
    }
  end

Если предположить, что для запуска getFullUri() требуется меньше пары секунд (см. Атрибут keep_alive_timeout), исходное соединение должноиспользоваться повторно независимо от того, как он был создан.

...