ホームページ >バックエンド開発 >PHPチュートリアル >php についてcurl は同時リクエストをサポートし、タイムアウトをミリ秒単位で制御します
php についてカールは同時リクエストをサポートし、タイムアウトをミリ秒単位で制御します
なぜこれを行うのですか?
現在のインターフェイス サービス呼び出しでは、パフォーマンスと安定性を確保するために、すべてサードパーティを呼び出します。インターフェイス 同時実行性とタイムアウト制御を行います。
コード実装 (オンラインで見つかる既成のもの)
public static function curlMultiRequest($urls, $options = array()) { $ch= array(); $results = array(); $mh = curl_multi_init(); foreach($urls as $key => $val) { $ch[$key] = curl_init(); if ($options) { curl_setopt_array($ch[$key], $options); } curl_setopt($ch[$key], CURLOPT_URL, $val); curl_multi_add_handle($mh, $ch[$key]); } $running = null; do { curl_multi_exec($mh, $running); } while ($running > 0); // Get content and remove handles. foreach ($ch as $key => $val) { $results[$key] = curl_multi_getcontent($val); curl_multi_remove_handle($mh, $val); } curl_multi_close($mh); return $results; }
$urls = [ 'http://www.baidu.com', 'http://www.qq.com' ];$opts = [ CURLOPT_HEADER => false, CURLOPT_TIMEOUT_MS => 50,//执行脚本超时 //CURLOPT_CONNECTTIMEOUT_MS => 50,//网络选址超时 CURLOPT_RETURNTRANSFER => true, CURLOPT_NOSIGNAL => true, //这个是设定毫秒必须设定];curlMultiRequest($urls,$opts);
if (!defined('CURLOPT_CONNECTTIMEOUT_MS')) { define('CURLOPT_CONNECTTIMEOUT_MS', 156);}if (!defined('CURLOPT_TIMEOUT_MS')) { define('CURLOPT_TIMEOUT_MS', 155);}