Heim  >  Artikel  >  Backend-Entwicklung  >  Analyse, wie PHP Curl-Parallelität nutzt, um die Back-End-Zugriffszeit zu reduzieren

Analyse, wie PHP Curl-Parallelität nutzt, um die Back-End-Zugriffszeit zu reduzieren

PHPz
PHPznach vorne
2016-05-16 08:59:513896Durchsuche

In diesem Artikel erfahren Sie, wie PHP die Parallelität von Curl verwendet, um die Back-End-Zugriffszeit zu verkürzen. Außerdem werden Beispiele verwendet, um die Programmlaufzeit vor und nach der Verwendung von gleichzeitigem Zugriff durch Curl zu vergleichen und zu analysieren. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

Analyse, wie PHP Curl-Parallelität nutzt, um die Back-End-Zugriffszeit zu reduzieren

In unseren täglichen Programmen ist es unvermeidlich, auf mehrere Schnittstellen gleichzeitig zuzugreifen. Wenn wir normalerweise auf mehrere Schnittstellen zugreifen, handelt es sich normalerweise um einen einzelnen und sequentiellen Zugriff Es gibt 3 Schnittstellen, jede Schnittstelle benötigt 500 Millisekunden, also werden unsere drei Schnittstellen 1500 Millisekunden dauern. Dieses Problem ist zu problematisch und beeinträchtigt die Seitenzugriffsgeschwindigkeit erheblich. Ist es möglich, die Geschwindigkeit durch gleichzeitigen Zugriff zu erhöhen? Heute werde ich kurz über die Verwendung der Curl-Parallelität zur Verbesserung der Seitenzugriffsgeschwindigkeit sprechen,

1. Alte Curl-Zugriffsmethode und zeitaufwändige Statistiken

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

Zeitaufwendig: 0,614 Sekunden

2. Curl-Methoden für gleichzeitigen Zugriff und zeitaufwändige Statistiken

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

Zeitaufwendig: 0,316 Sekunden

Die Zeit für den Zugriff auf die Back-End-Schnittstelle für die gesamte Seite von Handsome Bar wird halbiert

3. Curl-bezogene Parameter

curl_close – Schließen Sie eine cURL-Sitzung
curl_copy_handle – Kopieren Sie ein cURL-Handle zusammen mit allen seinen Einstellungen
curl_errno – Gibt die letzte Fehlernummer zurück
curl_error – Gibt eine Zeichenfolge zurück, die den letzten Fehler für die aktuelle Sitzung enthält
curl_exec – Eine cURL-Sitzung durchführen
curl_getinfo – Informationen zu einer bestimmten Übertragung abrufen
curl_init – Eine cURL-Sitzung initialisieren
curl_multi_add_handle – Ein normales cURL-Handle zu einem cURL-Multi-Handle hinzufügen
curl_multi_close – Einen Satz von cURL schließen handles
curl_multi_exec – Führt die Unterverbindungen des aktuellen cURL-Handles aus
curl_multi_getcontent – ​​Gibt den Inhalt eines cURL-Handles zurück, wenn CURLOPT_RETURNTRANSFER gesetzt ist
curl_multi_info_read – Informationen über die aktuellen Übertragungen abrufen
curl_multi_init – Gibt a zurück neues cURL-Multi-Handle
curl_multi_remove_handle – Entfernen Sie ein Multi-Handle aus einer Reihe von cURL-Handles
curl_multi_select – Warten Sie auf Aktivität bei einer beliebigen curl_multi-Verbindung
curl_setopt_array – Legen Sie mehrere Optionen für eine cURL-Übertragung fest
curl_setopt – Legen Sie eine fest Option für eine cURL-Übertragung
curl_version – Ruft cURL-Versionsinformationen ab

Ich hoffe, dieser Artikel wird für alle hilfreich sein, die sich mit PHP-Programmierung befassen.

Empfohlenes Lernen: „PHP-Video-Tutorial

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen