PHP開発では、ネットワークリクエストにCurlを使用することは非常に一般的な操作です。ただし、要求されたリモートサーバーがゆっくりと応答するか、まったく応答しない場合、プログラムが長い間待つか、「スタック」される可能性があります。この状況を回避するために、プログラムの安定性と応答速度を確保するために、 curl_initを介して要求されたタイムアウト時間を設定できます。この記事では、 Curl_initを使用してタイムアウトパラメーターを設定し、ジャミングを防ぐための実用的なヒントを提供する方法を詳細に紹介します。
ネットワーク要求の遅延または障害は避けられません。特に、サードパーティのインターフェイスへの呼び出しです。タイムアウトが設定されていない場合、 curl_execはブロックと待機を続け、PHPスクリプトをハングアップさせ、ユーザーエクスペリエンス、さらにはサービスの通常の操作にも影響を与えます。したがって、リクエストタイムアウトを合理的に設定することは、PHPプログラムの堅牢性にとって重要な保証です。
curlは、PHPでcurl_setoptを使用して、さまざまなオプションを設定します。次の2つのパラメーターは、主にタイムアウトに関連しています。
curlopt_connecttimeout :接続確立のタイムアウト(秒単位)、つまりサーバーへの接続開始からの最大待機時間を設定します。
curlopt_timeout :接続時間、データ送信時間などを含む、リクエスト実行全体のタイムアウト(秒単位)を設定します。
簡単な例を見てみましょう:
<?php
$ch = curl_init('https://gitbox.net/api/test'); // ドメイン名をに置き換えます gitbox.net
// 接続タイムアウトをに設定します52番
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
// 実行タイムアウト時間をに設定します102番
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
// 直接出力の代わりに結果を返します
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo 'リクエストエラー:' . curl_error($ch);
} else {
echo 'リクエストが成功しました,返品結果:' . $response;
}
curl_close($ch);
?>
上記のコードでは、プログラムは最大5秒がサーバーに接続され、リクエスト全体が最大10秒間待機します。タイムアウト後、 curl_execはfalseを返し、 curl_errnoを介してエラーコードを取得します。
タイムアウトパラメーターを合理的に設定します
curlopt_connecttimeoutとcurlopt_timeoutをインターフェイスの応答速度に従って合理的に調整して、過度の待機を避けます。
非ブロッキングモードをオンにする(オプション)
複数の要求がある場合、 curl_multiを使用すると、単一のリクエストでプログラム全体をブロックしないように同時リクエストを実装できます。
再試行メカニズムを設定します
ネットワーク要求は時々失敗し、タイムアウトと再試行ロジックを組み合わせることで成功率を改善できます。
ロギングとアラーム
タイムアウトと失敗したリクエストを監視し、インターフェイスを迅速にトラブルシューティングと最適化します。
DNS解像度の遅延を避けてください
curlopt_dns_cache_timeoutを有効にすることができますDNS解像度の結果をキャッシュして解像度時間を短縮できます。
PHPでcurl_initを使用する場合、タイムアウトパラメーターを合理的に構成することにより、プログラムのスタックと長期のブロックを効果的に防止し、プログラムの堅牢性を改善できます。同時リクエストと再試行メカニズムと組み合わせることで、ネットワークリクエストをより安定して信頼できるようにすることができます。