私はRedisストアからURLを読み込み、URLのHTTPステータスを取得するだけです。すべてEventMachine内にあります。自分のコードに何が問題なのか分かりませんが、期待通りに非同期ではありません。EventMachine、Redis&EM HTTPリクエスト
すべてのリクエストは最初のリクエストから最後のリクエストまで実行され、不思議なことに、最後のリクエスト後に最初のレスポンス(チェックしたい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で繰り返し処理していますか?イベントマシンの方法でそれをどのように処理するのですか? – ctp