PHPでは、 CurlはURLを介してHTTP要求を実行するための非常に強力なツールです。取得、リクエストの投稿、および他の多くのHTTP関連操作を処理できます。ただし、DNSクエリは、多くの場合、特に高周波リクエストで複数のHTTP要求を行う際のパフォーマンスボトルネックの1つです。各リクエストのDNSの再配分を回避するために、PHPはDNSキャッシュ共有にcurl_share_init()関数を提供し、それによってPHPアプリケーションのパフォーマンスが向上します。
curl_share_init()は、共有リソースの初期化に使用される関数です。共有リソースを使用して、複数のカールセッション、特にDNSキャッシュ間でデータを共有できます。 DNSキャッシュを共有することにより、複数のCurl要求により、DNSクエリの重複を回避でき、アプリケーションのパフォーマンスが向上します。
resource curl_share_init ( void )
この関数には入力パラメーターがなく、Curl共有ハンドル( curl_share_handle )を返します。この共有ハンドルは、異なるカールセッション間でキャッシュされたデータを共有するために使用されます。
共有キャッシュがない場合、Curlは要求するたびにDNSクエリを実行するため、遅延が増加します。特に、同じドメイン名に複数のリクエストを行っている場合、DNSクエリの繰り返しは多くの時間を無駄にする可能性があります。 DNSキャッシュの共有を有効にすることにより、DNS解像度のオーバーヘッドを大幅に減らすことができ、それによりPHPアプリケーションの応答速度が向上します。
まず、 CURL_SHARE_INIT()が呼び出され、共有リソースを初期化します。
$share = curl_share_init();
共有ハンドルが初期化されたら、 curl_share_setopt()を使用してDNSキャッシュ共有を有効にします。 curlshopt_shareオプションは、共有するリソースのタイプを指定し、 curl_lock_data_dnsはDNSキャッシュを共有するために使用されます。
curl_share_setopt($share, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);
次に、複数のカールセッションを作成し、共有ハンドルをそれらにバインドします。
$ch1 = curl_init('http://m66.net');
curl_setopt($ch1, CURLOPT_SHARE, $share);
$ch2 = curl_init('http://m66.net');
curl_setopt($ch2, CURLOPT_SHARE, $share);
すべてのカールセッションを設定した後、リクエストを個別に実行できます。
curl_exec($ch1);
curl_exec($ch2);
リクエストが完了したら、すべてのカールセッションと共有リソースを閉じてください。
curl_close($ch1);
curl_close($ch2);
curl_share_close($share);
curl_share_init()関数を使用してDNSキャッシュ共有を実装する方法を示す完全な例を次に示します。