使用http.get和迭代器导致的em-synchrony无法在根光纤中产生错误

时间:2013-06-25 15:21:29

标签: ruby eventmachine pg em-synchrony em-http-request

一个非常简单的情况,我得到根光纤错误。

require 'em-synchrony'
require 'em-synchrony/em-http'

urls = %w{http://www.google.com http://www.google.com http://www.google.com http://www.google.com http://www.google.com http://www.google.com}
EM.synchrony do

  EM::Synchrony::Iterator.new(urls, 2).each(
      proc { |url, iter|

        EM::HttpRequest.new(url).get
        iter.next
      }
  )
end

我可以在这里使用async,但不能使用同步http请求。

1 个答案:

答案 0 :(得分:2)

如果我要使用同步获取请求,我应该使用FiberIterator。

require 'em-synchrony'
require 'em-synchrony/em-http'
require "em-synchrony/fiber_iterator"

urls = %w{http://www.google.com http://www.google.com http://www.google.com http://www.google.com http://www.google.com http://www.google.com}
EM.synchrony do


  EM::Synchrony::FiberIterator.new(urls, 2).each(
      proc { |url|

        EM::HttpRequest.new(url).get

      }
  )
end