Rumah >pembangunan bahagian belakang >tutorial php >Analisis tentang cara PHP menggunakan curl concurrency untuk mengurangkan masa capaian bahagian belakang

Analisis tentang cara PHP menggunakan curl concurrency untuk mengurangkan masa capaian bahagian belakang

PHPz
PHPzke hadapan
2016-05-16 08:59:513979semak imbas

Artikel ini akan memperkenalkan kepada anda cara PHP menggunakan curl concurrency untuk mengurangkan masa capaian bahagian belakang Ia juga menggunakan contoh untuk membandingkan dan menganalisis masa berjalan program sebelum dan selepas curl menggunakan akses serentak. Ia mempunyai nilai rujukan tertentu Rakan-rakan yang memerlukan boleh merujuk kepadanya.

Analisis tentang cara PHP menggunakan curl concurrency untuk mengurangkan masa capaian bahagian belakang

Dalam program harian kami, tidak dapat dielakkan untuk mengakses beberapa antara muka pada masa yang sama Apabila kami biasanya menggunakan curl untuk mengakses, ia biasanya akses tunggal dan berurutan terdapat 3 antara muka, setiap antara muka mengambil masa 500 milisaat, jadi tiga antara muka kami akan mengambil masa 1500 milisaat Masalah ini terlalu sakit kepala dan serius menjejaskan kelajuan akses halaman. Hari ini saya akan bercakap secara ringkas tentang penggunaan curl concurrency untuk meningkatkan kelajuan akses halaman,

1 Kaedah akses curl lama dan statistik yang memakan masa

<?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}";
?>

. Memakan masa: 0.614 saat

2. Kaedah akses serentak Curl dan statistik memakan masa

<?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])) == &#39;&#39;) {
      $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}";
?>

Memakan masa: 0.316 >s

Masa untuk mengakses antara muka bahagian belakang untuk keseluruhan halaman Handsome Bar disimpan separuh

3 parameter berkaitan curl

curl_close — Tutup sesi cURL

curl_copy_handle — Salin pemegang cURL bersama semua pilihannya
curl_errno — Kembalikan nombor ralat terakhir
curl_error — Kembalikan rentetan yang mengandungi ralat terakhir untuk sesi semasa
curl_exec — Lakukan sesi cURL
curl_getinfo — Dapatkan maklumat mengenai pemindahan tertentu
curl_init — Mulakan sesi cURL
curl_multi_add_handle — Tambah pemegang cURL biasa pada pemegang berbilang cURL
curl_multi_close — Tutup set cURL mengendalikan
curl_multi_exec — Jalankan sub-sambungan pemegang cURL semasa
curl_multi_getcontent — Kembalikan kandungan pemegang cURL jika CURLOPT_RETURNTRANSFER ditetapkan
curl_multi_info_read — Dapatkan maklumat tentang pemindahan semasa —turn_multi_init Recurl_
pemegang berbilang cURL baharu
curl_multi_remove_handle — Keluarkan pemegang berbilang daripada set pemegang cURL
curl_multi_select — Tunggu aktiviti pada sebarang sambungan curl_multi
curl_setopt_array — Tetapkan berbilang pilihan untuk pemindahan cURL
Set curl_setopt pilihan untuk pemindahan cURL
curl_version — Mendapat maklumat versi cURL

Saya harap artikel ini akan membantu semua orang dalam pengaturcaraan PHP.

Pembelajaran yang disyorkan: "

Tutorial Video PHP"

Kenyataan:
Artikel ini dikembalikan pada:jb51.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam