HTTP: необходимо ли закрывать соединение с финишем после открытия соединения с новым? - PullRequest
0 голосов
/ 25 июня 2018

В Net :: HTTP API, поставляемом с ядром Ruby, есть несколько методов.Некоторые, такие как Net :: HTTP.get, Net :: HTTP.get_response и Net :: HTTP.post_form, не сохраняют соединения.Тем не менее, :: start и :: new сохраняют соединения.Фактически, :: start принимает блок с открытым соединением до выхода из блока:

uri = URI("example.com")
Net::HTTP.start(uri.host, uri.port) do |http|
  response1 = http.get('path1')
  response2 = http.get('path2')
end

Теперь вы можете использовать :: new вместо :: start:

  http = Net::HTTP.new('example.com')
  http.start
  response1 = http.get('path1')
  response2 = http.get('path2')

Но долженЯ вручную закрываю соединение?Является ли это необходимостью, или я могу сойти с рук, не используя это:

begin
  http = Net::HTTP.new('example.com')
  http.start
  response1 = http.get('path1')
  response2 = http.get('path2')
ensure
  http.finish
end

Если я пропущу завершающий вызов, это создаст какую-то ошибку или утечку памяти в приложении?

1 Ответ

0 голосов
/ 25 июня 2018

Использование new не открывает соединение, в соответствии с документацией:

Создает новый объект Net :: HTTP без открытия соединения TCP или сеанса HTTP.

Но чтобы ответить на ваш вопрос, да, вы должны закрыть свои соединения после их использования.Соединение в конце концов закроется, но это просто плохая практика - не очищать свои неуправляемые ресурсы, когда вы закончите с ними.

Предпочтительный метод - это способ, который вы продемонстрировали, используя start с блоком,который обеспечивает закрытие соединения при выходе из блока.

РЕДАКТИРОВАТЬ

Я не был достаточно конкретным.Я имел в виду метод класса start, а не метод экземпляра start.Сигнатура метода класса выглядит следующим образом:

start(address, port, p_addr, p_port, p_user, p_pass, &block)
start(address, port=nil, p_addr=nil, p_port=nil, p_user=nil, p_pass=nil, opt, &block)

Документацию по нему можно найти здесь , хотя я уверен, что вы уже можете выяснить параметры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...