Ruby での非同期 HTTP リクエスト 質問する

Ruby での非同期 HTTP リクエスト 質問する
 require 'net/http'

urls = [
  {'link' => 'http://www.google.com/'},
  {'link' => 'http://www.facebook.com/'},
 {'link' => 'http://www.yahoo.com/'}
]

urls.each do |u|
  u['content'] = Net::HTTP.get( URI.parse(u['link']) )
end

print urls

これは手続き型コードとして機能します。サーバーにアクセスしたいだけで、順序については問題はありません。Ruby でこれを行うにはどうすればよいでしょうか。1 つのオプションはスレッドを使用することです。

スレッドを使用した例を次に示します。

require 'net/http'

urls = [
  {'link' => 'http://www.google.com/'},
  {'link' => 'http://www.facebook.com/'},
  {'link' => 'http://www.yahoo.com/'}
]

urls.each do |u|
  Thread.new do
    u['content'] = Net::HTTP.get( URI.parse(u['link']) )
    puts "Successfully requested #{u['link']}"

    if urls.all? {|u| u.has_key?("content") }
      puts "Fetched all urls!"
      exit
    end
  end
end

もっと良い解決策はありますか..??

PS:- Mixpanel にアクセスしたいので、HTTP 呼び出しを実行して応答を待たないようにします。

ベストアンサー1

軽量な非同期処理はスレッドの仕事です(あなたが言ったように)または繊維

それ以外の場合は、イベントマシンこれは非常に強力なツールです。

編集: 上記のEvent MachineのURLは無効です。こちらがGitHubアカウントです。イベントマシン良い出発点となります。

おすすめ記事