为什么在使用net / http时需要运行启动?

时间:2018-11-21 16:26:18

标签: ruby http session request

如果我使用:

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 :(得分:1)

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属性),则无论如何创建原始连接,都应重新使用。