2

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
4

0 に答える 0