現在の位置: ホーム> 最新記事一覧> マルチスレッドPHP環境でcurl_share_init()を使用するためのベストプラクティス

マルチスレッドPHP環境でcurl_share_init()を使用するためのベストプラクティス

M66 2025-05-30

curl_share_init()は、共有リソースを初期化するための関数です。これにより、複数のカールセッション(つまり、複数のカール要求)がDNSキャッシュ、Cookieデータ、ファイル記述子などなどの特定のリソースを共有できます。このように、複数の同時のHTTP要求は同じ接続とセッションデータを共有し、それにより、リクエストごとに接続を再現し、効率を改善する問題を回避できます。

2.なぜcurl_share_init()を使用するのですか?

  1. リソースの共有:複数のカールセッションでは、DNSキャッシュ、Cookie、SSLセッションなどを共有できるため、重複したDNSクエリまたはCookie送信操作が削減されます。

  2. パフォーマンスの最適化:共有接続およびセッション情報は、要求ごとにリソースの消費を削減し、ネットワーク接続の確立プロセスを重複しないようにします。

  3. 同時リクエストのサポートcurl_share_init()は、マルチスレッドの同時リクエスト中にリソース共有を実現するのに役立ち、マルチスレッドリクエストをより効率的にします。

3。Phpにcurl_share_init()アプリケーションを実装します

複数のHTTP要求操作を実行し、 curl_share_init()を使用してリソース共有を達成することを望んでいるPHPスクリプトを開発しているとします。基本的な実装ステップは次のとおりです。

  1. 共有リソースの初期化
    curl_share_init()を使用して共有リソースを初期化し、複数のCurlセッションと共有します。

  2. リクエストごとに共有リソースを設定します
    curl要求で、 curl_share_setopt()を使用して、共有リソースをセッションに結合します。

  3. リクエストを実行します
    curl_multi_exec()を使用して、複数のCurl要求を並行して実行します。

  4. リソースのクリーンアップ
    リクエストが完了した後、共有リソースとカールセッションがリリースされます。

4.サンプルコード

<?php
// 共有リソースを初期化します
$share = curl_share_init();

// 共有リソースをセットアップします,のように DNS キャッシュ,cookie 待って
curl_share_setopt($share, CURLSHOPT_SHARE, CURLSHARE_SSL);

$urls = [
    "http://m66.net/api/endpoint1",
    "http://m66.net/api/endpoint2",
    "http://m66.net/api/endpoint3",
];

// 作成する cURL 複数のセッションハンドル
$multi_handle = curl_multi_init();
$curl_handles = [];

foreach ($urls as $url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SHARE, $share); // 共有リソースをセットアップします
    curl_multi_add_handle($multi_handle, $ch);
    $curl_handles[] = $ch;
}

// すべてを実行します cURL 聞く
$running = null;
do {
    curl_multi_exec($multi_handle, $running);
    curl_multi_select($multi_handle);
} while ($running > 0);

// 获取每个聞く的响应内容
foreach ($curl_handles as $ch) {
    $response = curl_multi_getcontent($ch);
    echo "Response: " . $response . "\n";
    curl_multi_remove_handle($multi_handle, $ch);
    curl_close($ch);
}

// 共有リソースをクリーンアップします cURL セッション
curl_share_close($share);
curl_multi_close($multi_handle);
?>

5。重要な手順の解釈

  1. 共有リソースの初期化curl_share_init()を使用して、共有リソースハンドルを作成します。次に、 curl_share_setopt()を使用して、共有リソースハンドル(たとえば、SSL接続、Cookie、DNSキャッシュなど)で共有されるリソースタイプを設定します。

  2. 共有リソースのセットアップ:各Curlセッションで、各セッションを設定して、以前に初期化された共有リソースをcurl_setopt($ ch、curlopt_share、$ share)から共有します。

  3. 同時リクエスト実行curl_multi_exec()およびcurl_multi_select()を使用して、複数のHTTP要求を並行して処理します。 curl_multi_exec()はすべてのリクエストを実行し、 curl_multi_select()はリクエストが完了するのを待つために使用されます。

  4. 応答処理とクリーニング:すべてのリクエストが実行された後、各要求の応答コンテンツはcurl_multi_getContent()を介して取得され、クリーンアップ操作は無料リソースに実行されます。

6。パフォーマンスの最適化と予防策

  1. 接続の作成のオーバーヘッドを減らす:各カールセッションは同じ接続プールを共有しているため、特にパフォーマンスの改善により、特に多数の同時リクエストがある場合、リクエストごとに接続を再確立するオーバーヘッドが大幅に減少します。

  2. スレッドの安全性の問題curl_share_init()および関連する操作は、マルチスレッド環境でのリソースの共有をサポートしますが、スレッドの競合を回避するために同時アクセスが適切に管理されるようにする必要があります。一般的に、複数のカールセッション間で共有することはスレッドセーフです。

  3. メモリとリソース管理:多数のリクエストの場合、メモリの漏れを避けるためにリクエストが完了した後、共有リソースとカールセッションが時間内にクリーンアップされるようにします。

7。概要

マルチスレッドPHP環境では、 CURL_SHARE_INIT()関数は、効率的なリソース共有とパフォーマンスの最適化を実現するための重要なツールです。共有リソースを合理的に使用することにより、接続の確立とリソースの廃棄物を複製することができ、同時リクエストの効率を改善できます。頻繁なHTTP要求を必要とするアプリケーション、特に高い並行性シナリオでは、 CURLの共有メカニズムはパフォーマンスと応答速度を効果的に改善できます。