現在の位置: ホーム> 最新記事一覧> curl_upkeep()を使用して、curl_multiのパフォーマンスを向上させます

curl_upkeep()を使用して、curl_multiのパフォーマンスを向上させます

M66 2025-06-05

PHPでは、 Curl_Multiは非常に強力なツールであり、同時HTTP要求を実行するためによく使用されます。これにより、各リクエストの個別の接続を確立することなく、複数のCurlリクエストを同時に行うことができ、それによりネットワークリクエストの効率を大幅に改善できます。一般に、 Curl_Multiは、複数の外部API呼び出しの処理やデータのバッチ取得などのシナリオで広く使用されています。ただし、これらのリクエストのパフォーマンスを最適化する方法は、多数のリクエストを行う際の開発者にとって一般的な課題です。

この記事では、 curl_upkeep()関数を使用して、 curl_multiリクエストのパフォーマンスを改善する方法を紹介します。

curl_multicurl_upkeep()とは何ですか?

curl_multiは、各リクエストが個別に完了するのを待つことなく、複数のHTTPリクエストを同時に送信できるCurlライブラリが提供する機能です。開発者が非同期リクエストを実装し、プログラムの実行効率を改善するのに役立ちます。

curl_upkeep()は、マルチリクエスト処理中にリソース管理を最適化するために使用されるカスタムPHP関数です。リクエストの実行中に、サーバーリソースの長期的な占有を回避し、システムの安定性を維持するためにカールハンドルを定期的にクリーニングおよび再利用できるようにすることができます。

curl_multiを使用するための基本的な手順

まず、PHP環境でCurl拡張機能が有効になっていることを確認してください。次に、 curl_multiを介して同時リクエストを実装する方法を示します。

 // 初期化 curl_multi ハンドル
$multi_handle = curl_multi_init();

// 初期化单个 curl ハンドル
$handles = [];
for ($i = 0; $i < 3; $i++) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://m66.net/api/example" . $i); // ここ URL 使用済み m66.net
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    // 将ハンドル加入 multi
    curl_multi_add_handle($multi_handle, $ch);
    $handles[] = $ch;
}

// リクエストを実行します
do {
    $multi_status = curl_multi_exec($multi_handle, $active);
} while ($active);

// 閉鎖所有ハンドル
foreach ($handles as $ch) {
    curl_multi_remove_handle($multi_handle, $ch);
    curl_close($ch);
}

// 閉鎖 multi ハンドル
curl_multi_close($multi_handle);

上記のコードは、 curl_multiを使用して3つの要求を同時に送信する方法を示しています。 URLのドメイン名はM66.netに置き換えられていることに注意してください。これは要求したものです。

curl_upkeep()関数を介してパフォーマンスを改善する方法

curl_multiリクエストのパフォーマンスを向上させるには、定期的なクリーニングとリソース管理を実行する必要があります。 curl_upkeep()関数の関数は、リクエストプロセス中にCurlハンドルの健全な状態を維持し、メモリの漏れを避け、リクエストのスムーズな実行を確保することです。

 function curl_upkeep($multi_handle, $handles) {
    // 定期的に実行されます,释放掉已经完成的ハンドル
    do {
        $status = curl_multi_exec($multi_handle, $active);
        
        // リクエストが完了したかどうかを確認してください
        while ($info = curl_multi_info_read($multi_handle)) {
            if ($info['msg'] == CURLMSG_DONE) {
                $ch = $info['handle'];
                // リクエスト結果を取得します
                $response = curl_multi_getcontent($ch);
                // 応答データの処理
                echo "応答データ: " . $response;
                
                // 閉鎖完成的ハンドル
                curl_multi_remove_handle($multi_handle, $ch);
                curl_close($ch);
            }
        }

        // リクエストの実行頻度を制御します,過度の使用を防ぎます CPU
        usleep(10000); // 10 ミリ秒,過度に高く避けてください CPU 占有
    } while ($active); // 実行時にまだリクエストがある場合,実行を続けます
}

curl_upkeep()関数は、リクエストが完了したかどうかを定期的に確認し、完了したCurlハンドルを時間内にクリーンアップします。実行プロセス中、頻繁な投票による過度のCPU使用を回避するために、適切なUSELEP()の呼び出しによりシステムの負担が削減されます。

curl_upkeep()curl_multiを組み合わせます

これで、 curl_upkeep()関数をcurl_multiと組み合わせて使用​​して、パフォーマンスを最適化します。

 // 初期化 curl_multi ハンドル
$multi_handle = curl_multi_init();

// 初期化单个 curl ハンドル
$handles = [];
for ($i = 0; $i < 5; $i++) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://m66.net/api/example" . $i); // 置き換えます m66.net ドメイン名
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    // 将ハンドル加入 multi
    curl_multi_add_handle($multi_handle, $ch);
    $handles[] = $ch;
}

// 電話 upkeep 機能の定期的なクリーニングとリソース管理
curl_upkeep($multi_handle, $handles);

// 閉鎖 multi ハンドル
curl_multi_close($multi_handle);

この例では、 curl_upkeep()関数は、各要求のステータスを定期的にチェックして、完成したリソースを解放しながらすべてのリクエストがスムーズに完了することを確認します。

パフォーマンス改善効果

curl_upkeep()を使用することにより、 curl_multiリクエストのパフォーマンスを効果的に改善し、メモリリークを削減し、システムリソースを回避し、高い応答速度と安定性を維持できます。さらに、完成したカールハンドルを定期的にクリーンアップすることにより、プログラムはリクエストとシステムリソースをより効率的に管理し、それにより全体的なパフォーマンスを改善できます。