132-インタフェース要求タイムアウト処理

2243 ワード

一、curl方式アクセスHTTP


CURLは、HTTPプロトコルインタフェースにアクセスするためによく使用されるlibライブラリです.パフォーマンスが高く、同時サポート機能などもあります.
curl_setopt($ch,opt)は、主に(重要な)CURLOPT_を含むタイムアウトの設定を設定できます.TIMEOUTは、cURLで実行可能な最長秒数(重要)CURLOPT_を設定するTIMEOUT_MSは、cURLで実行できる最長ミリ秒数を設定する.(cURL 7.16.2に組み込まれている.PHP 5.2.3から使用可能)CURLOPT_CONNECTIMEOUT接続開始までの待ち時間は、0に設定されている場合は無制限です.CURLOPT_CONNECTTIMEOUT_MSが接続を試みるまでの待ち時間は、ミリ秒単位です.0に設定されている場合は、無制限に待機します.(cURL 7.16.2に登録されている.PHP 5.2.3から利用可能)CURLOPT_DNS_CACHE_TIMEOUTは、DNS情報をメモリに保存する時間を設定します.デフォルトは120秒です.
  • **curl通常秒タイムアウト使用:**
  • curl_setopt($ch, CURLOPT_TIMEOUT,60);   //   
    
  • **curlミリ秒タイムアウトが必要な場合は、**
  • を追加する必要があります.
    curl_setopt($ch, CURLOPT_NOSIGNAL,1);    // ,   
    curl_setopt($ch, CURLOPT_TIMEOUT_MS,200);  // ,cURL 7.16.2 。 PHP 5.2.3 
    

    **その他のテクニック:**
  • curl_Multiのミリ秒レベルのタイムアウトにも問題があります.単一アクセスはmsレベルのタイムアウトをサポートします.curl_Multiパラレル複数変調
  • 二、フロー処理方式アクセスHTTP


    curlに加えて,fsockopen,あるいはfile操作関数を用いてHTTPプロトコルの処理を行うことが多いので,このタイムアウト処理も必要である.
  • 内蔵ストリーム処理関数stream_を使用set_timeout()とstream_get_meta_data()処理:
  • // Timeout in seconds   
    $timeout =5;   
    $fp = fsockopen("example.com",80, $errno, $errstr, $timeout);
    if($fp){   
            fwrite($fp,"GET / HTTP/1.0\r
    "); fwrite($fp,"Host: example.com\r
    "); fwrite($fp,"Connection: Close\r
    \r
    "); stream_set_blocking($fp,true); // , stream_set_timeout($fp,$timeout); // $info = stream_get_meta_data($fp); while((!feof($fp))&&(!$info['timed_out'])){ $data .= fgets($fp,4096); $info = stream_get_meta_data($fp); ob_flush; flush(); } if($info['timed_out']){ echo "Connection Timed Out!"; }else{ echo $data; } }
  • **file_get_contentsタイムアウト:**
  • $timeout = array(  
        'http'=> array(  
            'timeout'=>5// ,   
        )  
    );  
    $ctx = stream_context_create($timeout);  
    $text = file_get_contents("http://example.com/",0, $ctx);