em-synchrony文档链接到this article,这意味着使用fiber的代码:
require 'eventmachine'
require 'fiber'
require 'em-http-request'
def http_get(url)
f = Fiber.current
http = EventMachine::HttpRequest.new(url).get
# resume fiber once http call is done
http.callback { f.resume(http) }
http.errback { f.resume(http) }
return Fiber.yield
end
EventMachine.run do
Fiber.new {
page = http_get('http://myurl')
puts "Fetched page: #{page.response}"
EventMachine.stop
}.resume
end使用em- ...is相当于这个简单得多的代码:
require 'em-synchrony'
require 'em-http-request'
EventMachine.synchrony do
page = EventMachine::HttpRequest.new("http://myurl").get
p "No callbacks! Fetched page: #{page.response}"
EventMachine.stop
end但是,运行这两个命令会产生不同的结果。在第一个过程中,纤程会在HTML响应返回之前产生,而第二个过程似乎不等待响应就立即打印,因此打印的响应是空的。是我读错了还是打错了,或者这篇文章实际上暗示了错误的东西?
发布于 2012-01-25 22:42:52
您需要使用知道如何使用EventMachine.synchrony的扩展版本的EventMachine::HttpRequest。
变化
require 'em-http-request'至
require "em-synchrony/em-http" 这反过来将需要"em-http-request“,并将修补EventMachine::HttpRequest的#get, #head, #post, #delete, #put方法以与纤程一起工作。
https://stackoverflow.com/questions/9004132
复制相似问题