9

プログラムで HTTP POST リクエストを発行する場合、どのタイムアウト値が適切でしょうか?

私の場合、PHP で POST リクエストを行うときに「適切な」タイムアウト値を設定しようとしていますが、これはどの言語にも当てはまります。

それぞれユーザー指定の URL に対して一連の要求を発行できる必要があります。リクエストを同時にではなく連続して処理する必要がある場合は、リクエストがタイムアウトしたと見なされる適切な時間を指定したいと思います。

PHP のデフォルトのソケット タイムアウトは 60 秒です。これは、要求が完了しないと判断するまでに、不必要に長い待ち時間がかかるようです。

これらは POST リクエストであるため、迅速に完了する必要があります。GET リクエストのようにデータを取得して返す必要はありません。

ほとんどの場合、 X 秒以内に要求への応答を発行できなかったということは、X の値が60 よりも大幅に小さい場合、ホストが妥当な時間内に応答を発行する可能性が低いことを意味すると想定できるはずです。

確かに、ホストが単純な POST 要求に応答するのに 60 秒以上かかることはめったにありません。10秒以上かかることはめったにありませんか?5秒?

実際の X の妥当な値は何でしょうか? 提案に伴う正当化は非常に有益です。

4

2 に答える 2

5

常に妥当な値を得るにはあまりにも多くの要因が関係しているため、テストを設定することをお勧めします。

POST リクエストは、処理するデータを送信します。処理にかかる時間は?これは、アプリケーション/データ固有になります。

ホストはどこですか?ユーザーが URL を提供しているため、それは不明です。アプリケーションとホストの間のトラフィックがどのようなものかを知ることはできません。ホストのサーバー負荷を知ることはできません。

基本的に、普遍的な賢明なタイムアウトはありません。特定のニーズに基づいて、独自の最善の判断を下す必要があります。テストを設定し、それを使用して制限を決定します。

于 2008-10-04T23:31:57.243 に答える
2

ほとんどのライブラリには、接続タイムアウトと読み取りタイムアウトがあります。つまり、リモートサーバーへの接続を試行する間のタイムアウトと、要求を送信した後のタイムアウトであり、応答を待機する必要があります。

これがローカルWebサービスの場合、ライブラリでサポートされている場合は、接続タイムアウトを1秒以下に設定します。接続しているリモートサービスが利用できない場合、IMHOは、すべてのワーカースレッドがそのリモートサービスをブロックして他のアップストリームエラーを引き起こすよりも、すぐにユーザーに応答を返す方がよいでしょう。

読み取りタイムアウトについては、トリッキーですが、低くする必要があるため、リモートサービスが戻るのを待っているワーカーのプールを使い果たすことはありませんが、閉じるほど低くしたくない場合もあります。応答を読み取る前の接続。これは、テストして、システムが本番環境にあるときにメトリックとして追跡する必要があるものです。

于 2008-10-05T03:40:53.297 に答える