HTTPリクエストを同時処理するには

Webサービスにたくさんリクエストを投げるとき、1つ1つレスポンスを待っていると遅いので、同時に処理した方が良いですね。
(そもそも、WebサービスでAPIをたたく回数は最小限にするべきですが)

PHPならcurl_setoptをつかえば良さそうです。
http://php.net/manual/ja/function.curl-multi-add-handle.php

$mh = curl_multi_init();

$ch = array();
foreach ($urls as $index => $url) {
    $ch[$index] = curl_init();

    curl_setopt($ch[$index], CURLOPT_URL, $uri);
    curl_setopt($ch[$index], CURLOPT_HEADER, $header);
    curl_setopt($ch[$index], CURLOPT_RETURNTRANSFER, 1);

    curl_multi_add_handle($mh, $ch[$index]);
}

$running = null;
do {
    curl_multi_exec($mh, $running);
} while($running > 0);

$result = array();
foreach($ch as $curl) {
    $result[] = curl_multi_getcontent($curl);
    curl_multi_remove_handle($mh, $curl);
}

curl_multi_close($mh);

rubyなら、素直にスレッドを使うのが簡単そうです。

require 'uri'
require 'net/http'

threads = []
datas.each do |data|
  threads << Thread.new do
    #dataを使ったHTTP処理
  end
end

threads.each do |th|
  th.join
end
デザインも頼めるシステム開発会社をお探しならBPS株式会社までどうぞ 開発エンジニア積極採用中です! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

baba

ゆとりプログラマー。 高校時代から趣味でプログラミングを初め、そのままコードを書き続けて現在に至る。慶應義塾大学環境情報学部(SFC)卒業。BPS設立初期に在学中から参加している最古参メンバーの一人。Ruby on Rails、PHP、Androidアプリ、Windows/Macアプリ、超縦書の開発などを気まぐれにやる。軽度の資格マニアで、情報処理技術者試験(16区分17回 + 情報処理安全確保支援士試験)、技術士(情報工学部門)、Ruby Programmer Gold、AWSソリューションアーキテクト(アソシエイト)、日商簿記2級、漢検準1級などを保有。

babaの書いた記事

BPSアドベントカレンダー

週刊Railsウォッチ