>백엔드 개발 >PHP 튜토리얼 >PHP가 컬 동시성을 사용하여 백엔드 액세스 시간을 줄이는 방법 분석

PHP가 컬 동시성을 사용하여 백엔드 액세스 시간을 줄이는 방법 분석

WBOY
WBOY원래의
2016-07-29 08:49:401085검색

이 기사의 예에서는 PHP가 컬 동시성을 사용하여 백엔드 액세스 시간을 줄이는 방법을 설명합니다. 참고용으로 모든 사람과 공유하세요. 자세한 내용은 다음과 같습니다.

우리 일상 프로그램에서는 일반적으로 컬을 사용하여 액세스할 때 동시에 여러 인터페이스에 액세스하는 것이 불가피합니다. 인터페이스가 3개 있으면 각 인터페이스에 500밀리초가 걸리므로 우리의 인터페이스 3개에는 1500밀리초가 걸립니다. 이 문제는 너무 골치아프고 페이지 액세스 속도에 심각한 영향을 미칩니다. 오늘은 페이지 접근 속도를 향상시키기 위해 컬 동시성을 사용하는 방법에 대해 간단히 이야기하겠습니다.

1. 기존 컬 접근 방법과 시간이 많이 걸리는 통계

<&#63;php
function curl_fetch($url, $timeout=3){
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  $data = curl_exec($ch);
  $errno = curl_errno($ch);
  if ($errno>0) {
    $data = false;
  }
  curl_close($ch);
  return $data;
}
function microtime_float()
{
  list($usec, $sec) = explode(" ", microtime());
  return ((float)$usec + (float)$sec);
}
$url_arr=array(
   "taobao"=>"http://www.taobao.com",
   "sohu"=>"http://www.sohu.com",
   "sina"=>"http://www.sina.com.cn",
   );
 $time_start = microtime_float();
 $data=array();
 foreach ($url_arr as $key=>$val)
 {
   $data[$key]=curl_fetch($val);
 }
 $time_end = microtime_float();
 $time = $time_end - $time_start;
 echo "耗时:{$time}";
?>

소요시간 : 0.614초

2. Curl 동시 접속 방법 및 소요시간 통계

<&#63;php
function curl_multi_fetch($urlarr=array()){
  $result=$res=$ch=array();
  $nch = 0;
  $mh = curl_multi_init();
  foreach ($urlarr as $nk => $url) {
    $timeout=2;
    $ch[$nch] = curl_init();
    curl_setopt_array($ch[$nch], array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => $timeout,
    ));
    curl_multi_add_handle($mh, $ch[$nch]);
    ++$nch;
  }
  /* wait for performing request */
  do {
    $mrc = curl_multi_exec($mh, $running);
  } while (CURLM_CALL_MULTI_PERFORM == $mrc);
  while ($running && $mrc == CURLM_OK) {
    // wait for network
    if (curl_multi_select($mh, 0.5) > -1) {
      // pull in new data;
      do {
        $mrc = curl_multi_exec($mh, $running);
      } while (CURLM_CALL_MULTI_PERFORM == $mrc);
    }
  }
  if ($mrc != CURLM_OK) {
    error_log("CURL Data Error");
  }
  /* get data */
  $nch = 0;
  foreach ($urlarr as $moudle=>$node) {
    if (($err = curl_error($ch[$nch])) == '') {
      $res[$nch]=curl_multi_getcontent($ch[$nch]);
      $result[$moudle]=$res[$nch];
    }
    else
    {
      error_log("curl error");
    }
    curl_multi_remove_handle($mh,$ch[$nch]);
    curl_close($ch[$nch]);
    ++$nch;
  }
  curl_multi_close($mh);
  return $result;
}
$url_arr=array(
   "taobao"=>"http://www.taobao.com",
   "sohu"=>"http://www.sohu.com",
   "sina"=>"http://www.sina.com.cn",
   );
function microtime_float()
{
  list($usec, $sec) = explode(" ", microtime());
  return ((float)$usec + (float)$sec);
}
$time_start = microtime_float();
$data=curl_multi_fetch($url_arr);
$time_end = microtime_float();
$time = $time_end - $time_start;
 echo "耗时:{$time}";
?>

소요시간 : 0.316초

핸썸바 전체 페이지에 대한 백엔드 인터페이스 접속 시간이 절반으로 절약됩니다

3. 컬 관련 매개변수

curl_close — cURL 세션 종료
curl_copy_handle — 모든 기본 설정과 함께 cURL 핸들 복사
curl_errno — 마지막 오류 번호 반환
curl_error — 현재 세션의 마지막 오류가 포함된 문자열 반환
curl_exec — cURL 세션 수행
curl_getinfo — 특정 전송에 관한 정보 가져오기
curl_init — cURL 세션 초기화
curl_multi_add_handle — 일반 cURL 핸들을 cURL 다중 핸들에 추가
curl_multi_close — cURL 핸들 세트 닫기
curl_multi_exec — 현재 cURL 핸들의 하위 연결 실행
curl_multi_getcontent — CURLOPT_RETURNTRANSFER가 설정된 경우 cURL 핸들의 콘텐츠 반환
curl_multi_info_read — 현재 전송에 대한 정보 가져오기
curl_multi_init — 새 cURL 다중 핸들 반환
curl_multi_remove_handle — cURL 핸들 세트에서 다중 핸들 제거
curl_multi_select — 모든 컬_멀티 연결에서 활동 대기
curl_setopt_array — cURL 전송에 대한 여러 옵션 설정
curl_setopt — cURL 전송에 대한 옵션 설정
curl_version — cURL 버전 정보 가져오기

더 많은 PHP 관련 콘텐츠에 관심이 있는 독자는 이 사이트의 특별 주제인 "php 컬 사용 요약", "PHP 배열(어레이) 작업 기술"을 확인할 수 있습니다. , "PHP 데이터 구조 및 알고리즘 튜토리얼" , "PHP 수학적 연산 기술 요약", "PHP 날짜 및 시간 사용법 요약", "PHP 객체 지향 프로그래밍 입문 튜토리얼", "PHP 문자열 사용법 요약", "소개 PHP MySQL 데이터베이스 작업 튜토리얼" 및 "php 일반적인 데이터베이스 작업 기술 요약》

이 기사가 PHP 프로그래밍에 종사하는 모든 사람에게 도움이 되기를 바랍니다.

위 내용은 컬의 방법을 포함하여 PHP가 컬 동시성을 사용하여 백엔드 액세스 시간을 줄이는 방법에 대한 분석을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.