EventMachine::Iterator を使用して同時非同期 HTTP 呼び出しを実行しようとしています。非常に多くの呼び出しが errcallback になっていることがわかります。それらを再試行する方法はありますか?これらはすべて deferred_status が失敗したことがわかります。その失敗した状態に陥らないようにする方法。
urls = ["http://www.google.com"]*1000 #using this as an example
EventMachine.run do
EM::Iterator.new(urls, 1000).map(proc { |url, iter|
res = EventMachine::HttpRequest.new(url).get
sleep(0.100)
res.callback {
puts "#{res.req.uri} #{res.response_header.status}"
response =(JSON.parse(res.response)['response']) if res.response_header.status == 200
iter.return(response)
}
res.errback{
puts "Err => #{res.req.uri} #{res.response_header.status}"
iter.return(res.response_header.status)}
}, proc { |responses|
all = responses.flatten
puts 'all done!'
EM.stop
})
end