我正在使用 Typhoeus 处理我网站上对外部 API 的所有 HTTP 调用,直到最近它一直运行良好。一段时间后,我的 Rails 网站开始没有响应。我注意到当我执行 netstat 时,有大量的连接处于 CLOSE_WAIT 状态,它们是由以下代码生成的。
requests = []
hydra = Typhoeus::Hydra.new
urls.each_with_index do |url, index|
request = Typhoeus::Request.new(url, :timeout => 5000)
request.on_complete do |response|
begin
resp = JSON.parse(response.body)
if resp["error"]
p "no deal found for #{factual_ids[index]}"
{ :deals => nil }
else
{ :deals => resp["merchant"]["deals"] }
end
rescue Exception => e
p e.message
{ :deals => nil }
end
end
requests << request
hydra.queue(request)
end
hydra.run
我发现与在其他 HTTP 调用中使用 Typhoeus 的方式不同的是,上面的 url 都是 HTTPS url。我不知道这是否有任何意义,但这是我此刻唯一能想到的。有没有人见过这个?是否有一个选项我可以传递到 Typheous 以在连接完成后强制关闭连接?