Tech Racho エンジニアの「?」を「!」に。
  • 開発

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

CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。