PHPでは、 Curlはサーバー間でリクエストを送信し、HTTPリクエストと応答を効率的に処理できる非常に強力なライブラリです。長い接続を維持する必要性に関しては、 curl_setopt()およびその他の構成オプションは、接続の安定性とパフォーマンスを大幅に改善する可能性があります。
この記事では、curl_setopt()を介してcurlを構成し、 curl_upkeep()を正しく使用して、長い接続を維持するときに安定性を向上させる方法について説明します。
curl_setopt()は、PHP Curl関数ライブラリの重要な機能であり、その機能はCurlセッションのさまざまなオプションを設定することです。これらのオプションを設定することにより、リクエスト方法、タイムアウト時間、リクエストヘッダーなど、HTTP要求のさまざまな側面を制御できます。
common curl_setopt()構成オプションは次のとおりです。
curlopt_url :要求されたURLを設定します。
curlopt_returntransfer :直接出力ではなく、応答結果を文字列として返します。
curlopt_timeout :リクエストタイムアウト時間を設定します。
curlopt_httpheader :HTTPリクエストヘッダーを設定します。
curl_upkeep()は、長い接続を処理する際のcurlのヘルパー関数であり、通常、永続的な接続の安定性を維持するために使用されます。この関数により、接続が一定期間使用されていない場合に接続が閉じられず、リクエストが頻繁に送信されるが、頻繁に接続を確立したくないシナリオに適していることが保証されます。
まず、Curlセッションを初期化し、 curl_init()を介してセッションハンドルを作成する必要があります。
$ch = curl_init();
次に、 curl_setopt()を使用して、URL、要求方法、接続タイムアウトなどの必要なオプションを設定できます。
curl_setopt($ch, CURLOPT_URL, "https://m66.net/someapi");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Authorization: Bearer YOUR_ACCESS_TOKEN"
));
長い接続の安定性を改善するために、 curl_upkeep()を使用して使用できます。この関数により、セッション中の接続の安定性が保証され、接続のタイムアウトまたは中断が回避されます。
curl_upkeep($ch);
これにより、Curlは安定した接続を維持し、複数のリクエストが頻繁に切断されて再接続されないようにします。
curl_exec()を介してリクエストを実行し、返された応答結果を取得します。
$response = curl_exec($ch);
if(curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
すべての操作が完了したら、Curlセッションを閉じることを忘れないでください。
curl_close($ch);
Curlの安定性とパフォーマンスを最大化するには、次のヒントを参照できます。
長い接続の場合、タイムアウト時間を適切に増やすと、接続が時期尚早に閉じるのを効果的に防ぐことができます。
curl_setopt($ch, CURLOPT_TIMEOUT, 60); // タイムアウトを増やします
HTTP Keep-Aliveヘッダーは、リクエストするたびに接続を再確立することを避け、永続的な接続を維持するようサーバーに指示します。
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Connection: keep-alive"
));
リダイレクトが発生した場合、 Curlopt_MaxRedirsオプションを使用してリダイレクトの最大数を制御することで、無限リダイレクトのデッドループを回避できます。
curl_setopt($ch, CURLOPT_MAXREDIRS, 5);
接続をアクティブにするために、リクエストを定期的にサーバーに送信します。ハートビートメカニズムは、時限タスクまたは短いリクエスト間隔を使用して実装できます。
// 例:毎5接続をアクティブに保つために、数分に1回リクエストを送信します
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://m66.net/heartbeat");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);