同時リクエストを行うとき、PHPのCurl拡張機能は、複数のHTTP要求を同時に送信し、プログラムの効率を向上させるのに役立ちます。ただし、複数のリクエストを処理する場合、リソースが適切にリリースされ、メモリリークを回避したり、リークを処理したりする方法が開発者の焦点となります。この記事では、 curl_multi_close関数を正しく使用してスムーズなリソースリリースを確保する方法に焦点を当てます。
curl_multi_close関数は、 Curlマルチハンドルを閉じて、それに関連するすべてのリソースをリリースするために使用されます。 curl_multi_initを使用して複数のハンドルを作成し、複数のリクエストを送信する場合、すべてのリクエストはそのハンドルを介して管理されます。メモリリークを回避するために、すべてのリクエストを完了した後、 curl_multi_closeを呼び出す必要があります。関連するリソースを解放する必要があります。
同時リクエストの過程で、通常、次の手順が関係します。
複数のカールセッションを初期化し、複数のハンドルに追加します。
すべてのリクエストを実行し、それらが完了するのを待ちます。
各要求の応答データが正しく処理されていることを確認してください。
curl_multi_close関数を使用してマルチハンドルを閉じ、リソースを解放します。
次に、基本的なコードの例は、 curl_multi_closeを正しく使用する方法を示しています。
<?php
// 1. 初期化 cURL 複数のハンドル
$mh = curl_multi_init(); // 创建一个複数のハンドル
// 2. シングルを作成します cURL セッション并添加到複数のハンドル中
$ch1 = curl_init('http://gitbox.net/api/request1');
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $ch1);
$ch2 = curl_init('http://gitbox.net/api/request2');
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $ch2);
// 3. 複数のリクエストを実行します
do {
$status = curl_multi_exec($mh, $active);
if ($active) {
curl_multi_select($mh); // リクエストが完了するのを待ちます
}
} while ($active && $status == CURLM_OK);
// 4. 応答データを取得します
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);
// 5. 閉鎖 cURL セッション
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
// 6. 無料のリソース
curl_close($ch1);
curl_close($ch2);
// 7. 閉鎖複数のハンドル
curl_multi_close($mh);
echo "聞く1応答: " . $response1 . "\n";
echo "聞く2応答: " . $response2 . "\n";
?>
リソースリリース順序:閉じる前に、個々のカールセッションを複数のハンドルから必ず削除してください。それ以外の場合、ハンドルが誤ってリリースされ、メモリリークが発生する可能性があります。
エラー処理: curl_multi_execの実行中に、各リクエストの実行ステータスを確認することに注意する必要があります。要求が失敗した場合、エラーは時間内に処理され、対応するリソースをリリースする必要があります。
パフォーマンスの最適化:多数のリクエストがある場合は、不必要なブロッキングを最小限に抑えます。 curl_multi_selectによってCPU使用を減らすことができます。
curl_multi_close関数の正しい使用は、同時リクエストでリソースを解放するために重要です。上記のプロセスに従うことにより、各カールハンドルと複数のハンドルが正しく閉じられてリリースされるようにし、メモリの漏れを避けるだけでなく、プログラムの安定性とパフォーマンスを改善します。特に並行性の高いシナリオでは、リソースの合理的な管理により、コードの堅牢性が大幅に向上します。