現在の位置: ホーム> 最新記事一覧> シャットダウン速度を最適化するために同時リクエストでcurl_multi_closeを使用する方法

シャットダウン速度を最適化するために同時リクエストでcurl_multi_closeを使用する方法

gitbox 2025-05-12

Curlを使用してPHPで同時リクエストを実行する場合、通常、 curl_multi_*シリーズの関数を使用して複数の同時HTTP要求を管理することが含まれます。同時リクエストを効率的に処理し、関連するリソースをリリースするには、 curl_multi_close関数を正しく使用する必要があります。この記事では、同時リクエストが終了した後にcurl_multi_closeを正しく使用する方法を詳細に説明します。

1。同時リクエストの概念

同時リクエストには、複数のHTTP要求を同時に発行することを指します。これは、通常、複数のリクエストの処理効率を改善するために使用されます。 PHPでは、 curl_multi_initを使用して複数のCurlハンドルを作成し、 curl_multi_add_handleを介して複数の個別のCurl要求ハンドルを複数のハンドルに追加し、 Curl_multi_execを介してこれらの同時リクエストを実行できます。

2。curl_multi_closeを使用することの重要性

curl_multi_*の一連の関数を使用して、同時リクエストを実行すると、各リクエストはいくつかのシステムリソースを占有します。リソースの漏れを回避するには、関連するすべてのリソースを解放するためにリクエストが完了した後、 curl_multi_closeを使用して複数のハンドルを閉じる必要があります。

curl_multi_closeの主な機能は次のとおりです。

  • 複数のカールハンドルに関連付けられたすべてのカールセッションを閉じます。

  • curl_multi_initが作成されたときに割り当てられたメモリリソースを解放します。

curl_multi_closeが呼び出されない場合、これらのリソースは正しくリリースされず、メモリリークやパフォーマンスの問題につながる可能性があります。

3。例:curl_multi_closeを正しく使用する方法

同時リクエストが終了した後にcurl_multi_closeを使用してリソースを正しく解放する方法を示す簡単な例を以下に示します。

 <?php

// 初期化 cURL 複数のハンドル
$mh = curl_multi_init();

// 複数のリクエストを定義します URLs
$urls = [
    "https://gitbox.net/api/endpoint1",
    "https://gitbox.net/api/endpoint2",
    "https://gitbox.net/api/endpoint3"
];

// ストレージ cURL ハンドル
$chArray = [];

// 作成する cURL ハンドル并添加到複数のハンドル中
foreach ($urls as $url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_multi_add_handle($mh, $ch);
    $chArray[] = $ch;
}

// 同時リクエストを実行します
do {
    $status = curl_multi_exec($mh, $active);
    if ($active) {
        curl_multi_select($mh);
    }
} while ($active && $status == CURLM_OK);

// 応答データを取得して処理します
foreach ($chArray as $ch) {
    $response = curl_multi_getcontent($ch);
    // 処理応答コンテンツ
    echo "Response: " . $response . "\n";
}

// 正确关闭複数のハンドル并释放资源
foreach ($chArray as $ch) {
    curl_multi_remove_handle($mh, $ch);
    curl_close($ch); // それぞれを閉じます cURL ハンドル
}

// 最后关闭複数のハンドル
curl_multi_close($mh);

echo "すべてのリクエストが完了しました,リソースがリリースされました。\n";
?>

4。コード解析

  1. 複数のハンドルの初期化:
    curl_multi_initは、複数のハンドルを初期化するために使用されます。これは、複数のCurlハンドルを管理するために使用されます。

  2. カールハンドルを作成し、複数のハンドルに追加します。
    Curl_initを介して単一のCurlハンドルを作成し、対応する要求パラメーターを設定します。次に、 curl_multi_add_handleを使用して、各ハンドルを複数のハンドルに追加します。

  3. 同時リクエストを実行します:
    curl_multi_execは、すべてのリクエストが完了するまですべての並行要求を実行するループ関数です。 curl_multi_selectは、アクティビティリクエストが完了するのを待つために使用されます。

  4. 応答データの処理:
    curl_multi_getContentを使用して、各要求の応答を取得し、対応する処理を実行します。

  5. リソースを閉じます:
    curl_multi_remove_handleを使用して、複数のハンドルから各curlハンドルを削除し、 curl_closeを呼び出して各curlハンドルを閉じます。最後に、 curl_multi_closeを呼び出して複数のハンドルを閉じて、すべてのリソースをリリースします。

5。概要

同時リクエストを行う際に、リソースを適切に管理およびリリースすることが非常に重要です。 curl_multi_closeおよびその他の関連する機能を使用することにより、リクエストが完了した後にすべての占有リソースがリリースされ、メモリリークとパフォーマンスの問題を回避できます。特に、同時リクエストが高いシナリオでは、プログラムの安定性と効率を改善するためには、合理的なリソース管理が重要です。