Fix several bugs in connection pool

This commit is contained in:
Omar Roth 2018-01-20 18:19:55 -06:00
parent 01d16ec6af
commit a236d7a4e8
1 changed files with 26 additions and 11 deletions

View File

@ -16,32 +16,47 @@ CONTEXT.add_options(
OpenSSL::SSL::Options::NO_SSL_V3 OpenSSL::SSL::Options::NO_SSL_V3
) )
POOL = Deque.new(30) do POOL = Deque.new(30) do
HTTP::Client.new(URL, CONTEXT) client = HTTP::Client.new(URL, CONTEXT)
client.connect_timeout = Time::Span.new(0, 0, 0, 5)
client
end end
# Refresh all the connections in the pool by crawling recommended # Refresh all the connections in the pool by crawling recommended
spawn do spawn do
# Arbitrary start value # Arbitrary start value
id = Deque.new(50, "0xjKNDMgE54") id = Deque.new(50, "0xjKNDMgE54")
while true loop do
client = get_client client = get_client
if rand(100) < 1
client = HTTP::Client.new(URL, CONTEXT)
client.connect_timeout = Time::Span.new(0, 0, 0, 5)
end
time = Time.now time = Time.now
begin begin
video = get_video(id[rand(id.size)], false) video = get_video(id[rand(id.size)], false)
rescue ex
puts ex
POOL << client
next
end
rvs = [] of Hash(String, String) rvs = [] of Hash(String, String)
if video.info.has_key?("rvs")
video.info["rvs"].split(",").each do |rv| video.info["rvs"].split(",").each do |rv|
rvs << HTTP::Params.parse(rv).to_h rvs << HTTP::Params.parse(rv).to_h
end end
end
rvs.each do |rv| rvs.each do |rv|
if rv.has_key?("id")
id << rv["id"] id << rv["id"]
id.shift
end end
puts "#{Time.now} 200 GET #{elapsed_text(Time.now - time)}" end
rescue ex
next
ensure
POOL << client POOL << client
end puts "#{Time.now} 200 GET youtube.com/watch?v=#{video.id} #{elapsed_text(Time.now - time)}"
end end
end end