現在の位置: ホーム> 最新記事一覧> curl_upkeepの使用方法は? curl_multi_add_handle()の後にcurl_upkeep関数を正しく呼び出すように教えてください

curl_upkeepの使用方法は? curl_multi_add_handle()の後にcurl_upkeep関数を正しく呼び出すように教えてください

M66 2025-06-23

PHPでマルチスレッドリクエストにCurlライブラリを使用する場合、 curl_multi_add_handle()関数は重要なステップであり、Curl Multiplexedハンドルに複数のCurlハンドルを追加できます。ただし、マルチスレッドリクエストを実行している場合、多重化されたハンドルを適切に管理および維持する必要がある状況に遭遇する可能性があります。この場合、 curl_upkeep()関数は非常に便利です。 curl_multi_add_handle()を呼び出した後、複数の同時リクエストがアクティブのままであることを保証し、無効なリクエストをタイムリーにクリーンアップできます。

この記事では、 curl_multi_add_handle()を使用した後、 curl_upkeep()関数を正しく呼び出す方法を詳細に紹介し、curlマルチスレッドリクエストのスムーズな実行を確認します。

1. curl_multi_add_handle()関数は何ですか?

curl_multi_add_handle()関数は、多重化ハンドルに複数のCurlハンドルを追加するPHPの関数です。各リクエストの新しいカールセッションを個別に作成することなく、複数のHTTPリクエストを同時に行うことができます。この関数を呼び出した後、 curl_multi_exec()を介して実行し、すべてのリクエストが完了するのを待ちます。

たとえば、以下は、単純なマルチスレッドカールリクエストの例です。

 $mh = curl_multi_init(); // 多重化されたハンドルを初期化します

// 複数を作成しますcURLハンドル
$ch1 = curl_init('http://m66.net/api/data1');
$ch2 = curl_init('http://m66.net/api/data2');
$ch3 = curl_init('http://m66.net/api/data3');

// 将ハンドル添加到多路复用ハンドル中
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);
curl_multi_add_handle($mh, $ch3);

2。curl_upkeep ()の役割

curl_upkeep()関数の関数は、多重化されたハンドルでは、すべてのリクエストがアクティブなままであり、タイムリーに不要な要求を管理できることを確認することです。これにより、完了または失敗したリクエストをクリーンアップし、システムのリソースを時間内にリサイクルできるようにし、不必要なメモリ消費を回避できます。

3. curl_multi_add_handle()の後にcurl_upkeep ()を呼び出す方法

多重化ハンドルに複数のCurlハンドルを追加した後、これらのハンドルのライフサイクルを管理するために、定期的にcurl_upkeep()を呼び出す必要があります。特定の手順は次のとおりです。

  1. curl_multi_exec()に電話して、リクエストを開始します。

  2. curl_upkeep()を使用して、Curlセッションのアクティブ状態を維持します。

  3. すべてのリクエストが完了したら、完了したハンドルを取り外します。

具体的な例を次に示します。

 $mh = curl_multi_init(); // 初始化多路复用ハンドル

// 複数を作成しますcURLハンドル
$ch1 = curl_init('http://m66.net/api/data1');
$ch2 = curl_init('http://m66.net/api/data2');
$ch3 = curl_init('http://m66.net/api/data3');

// 将ハンドル添加到多路复用ハンドル中
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);
curl_multi_add_handle($mh, $ch3);

// リクエストを実行します
$running = null;
do {
    curl_multi_exec($mh, $running);  // リクエストを実行します
    curl_upkeep($mh);  // 维护多路复用ハンドル
} while ($running);

// 各リクエストの結果を取得します
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);
$response3 = curl_multi_getcontent($ch3);

// 关闭ハンドル
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_remove_handle($mh, $ch3);

// 关闭多路复用ハンドル
curl_multi_close($mh);

4.なぜcurl_upkeep()を使用するのですか?

curl_multi_exec()を使用して同時リクエストを実行する場合、最初の実行時にすべてのリクエストが完了できることを保証することはできません。時々、一部のリクエストには時間がかかる場合があります。 curl_upkeep()は、これらのハンドルが不要なリソースを消費するのを防ぐために、完了した要求ハンドルを定期的にクリーンアップできます。さらに、 curl_upkeep()は、忙しいリクエストでもプログラムを効率的に実行できることも保証します。

5。結論

curl_multi_add_handle ()を使用してPHPで複数の同時リクエストを処理する場合、curl_upkeep()は非常に重要なツールです。多重化されたハンドルを管理し、無効なリクエストをタイムリーにクリーンアップし、リクエストの効率的な実行とリソースの合理的な利用を確保するのに役立ちます。 CURL_UPKEEP()を合理的に使用することにより、PHPの同時リクエストをより安定して信頼性を高めることができます。