ホームページ >バックエンド開発 >PHPチュートリアル >PHP がカール同時実行を使用してバックエンドのアクセス時間を短縮する方法の分析

PHP がカール同時実行を使用してバックエンドのアクセス時間を短縮する方法の分析

WBOY
WBOYオリジナル
2016-07-29 08:49:401116ブラウズ

この記事の例では、PHP がカール同時実行性を使用してバックエンドのアクセス時間を短縮する方法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです。

通常のプログラムでは、複数のインターフェイスに同時にアクセスすることは避けられず、通常、curl を使用してアクセスする場合、それらのインターフェイスに個別に順次アクセスします。 3 つのインターフェイスがあり、各インターフェイスには 500 ミリ秒かかるため、3 つのインターフェイスでは 1500 ミリ秒かかります。この問題は非常に厄介で、ページのアクセス速度に深刻な影響を及ぼします。同時アクセスによって速度を上げることは可能でしょうか。今日は、ページのアクセス速度を向上させるためのcurl同時アクセス方法、

1.古いcurlアクセス方法と時間のかかる統計

<&#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 秒

Shuaihan Bar はバックエンドインターフェイスへのアクセス時間を半分に節約します

3.curl 関連パラメータ

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 — cURL ハンドルのコンテンツを返しますCURLOPT_RETURTRANSFER が設定されている場合
curl_multi_info_read — 現在の転送に関する情報を取得します
curl_multi_init — 新しい cURL マルチ ハンドルを返します
curl_multi_remove_handle — cURL ハンドルのセットからマルチ ハンドルを削除します
curl_multi_select — 任意のcurl_multi接続でのアクティビティを待機します
curl_setopt_array — 複数のハンドルを設定しますcURL 転送のオプション
curl_setopt — cURL 転送のオプションを設定します
curl_version — cURL のバージョン情報を取得します

さらに PHP 関連のコンテンツに興味のある読者は、このサイトの特別なトピックをチェックしてください:「php Curl の使用法の概要」、「 「PHP配列(Array)」)「操作スキル総集編」「PHPデータ構造とアルゴリズム解説書」「PHP数理演算スキルまとめ」「php日付と時刻の使い方まとめ」「phpオブジェクト指向プログラミング入門チュートリアル」 , 「php string (文字列) の使い方まとめ」「PHP+MySQL データベース操作入門チュートリアル」「一般的な PHP データベース操作スキルのまとめ」

この記事が、PHP プログラミングの皆様のお役に立てれば幸いです。

上記では、curl のメソッドを含め、PHP がバックエンド アクセス時間を短縮するためにどのようにcurl 同時実行を使用するかについての分析を紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。