プログラムでリクエストを発行するときに使用する賢明なHTTP POSTタイムアウト値
質問
プログラムでHTTP POSTリクエストを発行する場合、どのタイムアウト値が適切ですか?
私の場合、PHPでPOSTリクエストを行うときに「適切な」タイムアウト値を設定しようとしていますが、これはどの言語にも適用されます。
それぞれがユーザー指定のURLに対して一連のリクエストを発行できる必要があります。同時ではなく連続してリクエストを処理する必要がある場合は、それを超えるとリクエストがタイムアウトしたとみなされる合理的な時間を指定したいと思います。
PHPのデフォルトのソケットタイムアウトは60秒です。これは、リクエストが完了しないと判断するまで待機する時間が不必要に長いようです。
これらはPOSTリクエストであるため、すぐに完了する必要があります-GETリクエストのように取得および返されるデータはありません。
ほとんどの場合、リクエストへの応答をX秒以内に発行できないということは、ホストが値に対して妥当な時間内に応答を発行する可能性が低いことを想定できるはずです。 Xの60未満かなり。
ホストが単純なPOST要求に応答するのに60秒以上かかることはほとんどありません。 10秒以上かかることはめったにありませんか? 5秒?
実際のXの実用的な値は何ですか?提案に伴う正当化は非常に有益です。
解決
テストをセットアップすることをお勧めします。これは、常に賢明な値を与えるには関係する要素が多すぎるためです。
POST要求は、処理するデータを送信します。処理にはどれくらい時間がかかりますか?これはアプリケーション/データ固有です。
ホストはどこですか?ユーザーがURLを提供しているため、不明です。アプリケーションとホスト間のトラフィックがどのようなものかはわかりません。ホストのサーバー負荷を知ることができません。
本質的に、普遍的なタイムアウトはありません。特定のニーズに基づいて独自の最善の判断を使用する必要があります。テストを設定し、それを使用して制限を決定します。
他のヒント
ほとんどのライブラリには、接続タイムアウトと読み取りタイムアウトがあります。つまり、リモートサーバーに接続しようとする間のタイムアウトと、応答を待つ必要があるリクエスト送信後のタイムアウトです。
これがローカルWebサービスである場合、ライブラリがサポートしている場合、接続タイムアウトを1秒以下に低く設定します。接続しているリモートサービスが利用できない場合は、すべてのワーカースレッドがそのリモートサービスをブロックして、他のアップストリームエラーを引き起こすよりも、すぐにユーザーに応答を返す方が良いです。
読み取りタイムアウトについては、トリッキーです。これは低くする必要があります。そのため、リモートサービスが戻るのを待っているワーカーのプールを使い果たすことはありませんが、それほど低くしたくないです。応答を読み取る前に接続を閉じます。これはテストする必要があるもので、システムが実稼働状態のときにメトリックとして追跡する必要があります。