Mae向きなブログ

Mae向きな日記のブログ版。ようやくこちらに移行してきました。

EventMachine

非同期プログラミング with Perl」を見ていたら,

AnyEventで「複数URLに接続してHTTP GETするコード」

が83枚目に載っています。

これをRubyで書いたらどうなるんだろう?とtwitterで呟いてみた*1ところ,@nuna さんよりサンプルプログラム付き(以下掲載)のアドバイス*2をいただきました。ありがとうございます。

em-http-request_example.rb

#!/usr/bin/ruby

require 'rubygems'
require 'em-http-request'

urls = %w(
http://www.livedoor.com/
http://www.dena.jp/
http://mixi.jp/
http://www.gaiax.co.jp/
)

EventMachine.run do
  multi = EventMachine::MultiRequest.new

  urls.each do |url|
    multi.add(EventMachine::HttpRequest.new(url).get)
  end

  multi.callback do
    multi.responses[:succeeded].each do |response|
      puts "Got #{response.uri}"
    end
    EventMachine.stop
  end
end

実行

$ gem search -r em-http 

*** REMOTE GEMS ***

astro-em-http-request (0.2.10)
em-http-oauth-request (0.1.0)
em-http-request (0.2.10)
$ gem install em-http-request
$ ruby em-http-request_example.rb 
Got http://www.gaiax.co.jp:80/
Got http://mixi.jp:80/
Got http://www.dena.jp:80/
Got http://www.livedoor.com:80/