如果我使用:
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会话的数量是否不同?
答案 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
属性),则无论如何创建原始连接,都应重新使用。