首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Em-synchrony示例代码未按预期工作

Em-synchrony示例代码未按预期工作
EN

Stack Overflow用户
提问于 2012-01-25 22:16:17
回答 1查看 882关注 0票数 1

em-synchrony文档链接到this article,这意味着使用fiber的代码:

代码语言:javascript
复制
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相当于这个简单得多的代码:

代码语言:javascript
复制
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响应返回之前产生,而第二个过程似乎不等待响应就立即打印,因此打印的响应是空的。是我读错了还是打错了,或者这篇文章实际上暗示了错误的东西?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-25 22:42:52

您需要使用知道如何使用EventMachine.synchrony的扩展版本的EventMachine::HttpRequest

变化

代码语言:javascript
复制
require 'em-http-request'

代码语言:javascript
复制
require "em-synchrony/em-http" 

这反过来将需要"em-http-request“,并将修补EventMachine::HttpRequest#get, #head, #post, #delete, #put方法以与纤程一起工作。

这是the link to source code of em-synchrony/em-http

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9004132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档