【发布时间】:2011-12-12 16:44:47
【问题描述】:
我尝试从 Redis 存储中读取 URL,并简单地获取 URL 的 HTTP 状态。全部在 EventMachine 中。我不知道我的代码有什么问题,但它不像预期的那样异步。
所有请求都是从第一个到最后一个触发的,奇怪的是我只在最后一个请求之后得到第一个响应(我要检查的 HTTP 标头)。有没有人暗示那里出了什么问题?
require 'eventmachine'
require 'em-hiredis'
require 'em-http'
EM.run do
@redis = EM::Hiredis.connect
@redis.errback do |code|
puts "Error code: #{code}"
end
@redis.keys("domain:*") do |domains|
domains.each do |domain|
if domain
http = EM::HttpRequest.new("http://www.#{domain}", :connect_timeout => 1).get
http.callback do
puts http.response_header.http_status
end
else
EM.stop
end
end
end
end
我正在为几千个域运行此脚本,因此我希望在发送最后一个请求之前获得第一个响应。
【问题讨论】:
-
是不是因为通过.each迭代key数组?如何以 eventmachine 的方式对其进行迭代?
标签: ruby asynchronous redis eventmachine