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