PHP 에서 curl멀 티 병발 의 실현

PHP 의 curlmulti 시리즈 함 수 는 일반적인 curl 함수 처럼 요청 한 후에 막 히 는 것 이 아니 라 여러 URL 을 동시에 요청 할 수 있 습 니 다.결과 가 돌아 올 때 까지 다음 요청 을 할 수 있 습 니 다.따라서 URL 을 대량으로 요청 할 때 curlmulti 시리즈 함수 가 프로그램의 운행 효율 을 향상 시 킵 니 다.
curl 일반 요청

$startTime = microtime(true);
$chArr = [];
$optArr = [
  CURLOPT_URL => 'http://www.httpbin.org/ip',
  CURLOPT_HEADER => 0,
  CURLOPT_RETURNTRANSFER => 1,
];
$result = [];

//    curl     
for ($i=0; $i<10; $i++) {
  $chArr[$i] = curl_init();
  curl_setopt_array($chArr[$i], $optArr);
  $result[$i] = curl_exec($chArr[$i]);
  curl_close($chArr[$i]);
}

$endTime = microtime(true);
echo sprintf("use time: %.3f s".PHP_EOL, $endTime - $startTime);

use time: 6.080 s
curl_멀 티 병렬 요청

$startTime = microtime(true);
$chArr = [];
$optArr = [
  CURLOPT_URL => 'http://www.httpbin.org/ip',
  CURLOPT_HEADER => 0,
  CURLOPT_RETURNTRANSFER => 1,
];
$result = [];

//    curl  
for ($i=0; $i<10; $i++) {
  $chArr[$i] = curl_init();
  curl_setopt_array($chArr[$i], $optArr);
}
//     curl  
$mh = curl_multi_init();
//   curl        curl   
foreach ($chArr as $ch) {
  curl_multi_add_handle($mh, $ch);
}
//                
$active = null;
/**
 *           $mh       $ch   ,   $mh            $active,
 *        CURLM_CALL_MULTI_PERFORM  ,            ,    ,
 *      $ch              ,      CURLM_OK ,      ,         。
 */
do {
  //              
  $mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
/**
 *        ,        $active > 0     while    ,  :
 * do {
 *  $mrc = curl_multi_exec($mh, $active);
 * } while ($active > 0);
 *                     ,         curl_multi_exec   ,      CPU     ,
 *            ,     curl_multi_select                      。
 */

/**
 * $active   true  ,  $mh         $ch       ,
 * $mrc == CURLM_OK,     $ch               。
 */
while ($active && $mrc == CURLM_OK) {
  /** 
   *         ,           (  $mh            $ch   ),
   *          $mh       $ch               ($mrc == CURLM_OK)      ,
   *        $mh             curl_multi_exec   ,    CPU  。
   */
   if (curl_multi_select($mh) != -1) {
    //                  $ch   
    do {
      $mrc = curl_multi_exec($mh, $active);
    } while ($mrc == CURLM_CALL_MULTI_PERFORM);
  }
}

foreach ($chArr as $i=>$ch) {
  //    curl      
  $result[$i] = curl_multi_getcontent($ch);
  //               
  curl_multi_remove_handle($mh, $ch);
}
//    curl  
curl_multi_close($mh);
$endTime = microtime(true);
echo sprintf("use time: %.3f s".PHP_EOL, $endTime - $startTime);

use time: 0.599 s
위 프로그램의 실행 시간 을 비교 해 보면 curl 을 사용 합 니 다.multi 시리즈 함수 병행 요청 은 일반 curl 함수 보다 순서대로 요청 효율 이 높 습 니 다.
PHP 에서 curl 에 대한 자세 한 설명 입 니 다.multi 병발 의 실현 에 관 한 글 은 여기까지 입 니 다.더 많은 관련 PHP curlmulti 동시 다발 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기