使用EventMachine :: Iterator进行异步HTTP调用

时间:2013-06-21 17:28:15

标签: ruby-on-rails ruby eventmachine

我正在尝试使用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

0 个答案:

没有答案