「非同期プログラミング 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/