なぜ net/http は 30 秒を超えるタイムアウト期間を考慮しないのですか?

WBOY
リリース: 2024-02-11 17:30:08
転載
801 人が閲覧しました

为什么 net/http 不考虑超过 30 秒的超时持续时间?

#php エディター Banana は、ネットワーク リクエストのタイムアウト期間について議論しているときに発見しました。なぜ net/http は設計時に 30 秒を超えるタイムアウト制限を考慮しなかったのですか?タイムアウト期間とは、リクエストの送信後、指定された時間内に応答が受信されない場合、リクエストは失敗したとみなされることを意味します。ネットワークリクエストではタイムアウトの設定が非常に重要で、短すぎるとリクエストが失敗する可能性があり、長すぎるとリソースが無駄に消費されます。分析によると、主な理由は、設計時にパフォーマンスとリソースのバランス、およびネットワーク環境の不確実性が考慮されていたためです。次に、この質問に詳しく答えていきます。

質問内容

golang 1.20.1を使用してください。

golang の net/http および context パッケージでは、30 秒を超えるタイムアウトを設定できません。

のように、タイムアウトを短く設定するとうまく機能します。

コード:

リーリー ###ログ:### リーリー

タイムアウトは 60 秒ではなく 30 秒です。

http.newrequestwithcontext(...)

を使用し、同じタイムアウトが設定されたコンテキストを使用すると、同じ動作が得られます。 コード:

リーリー ###ログ:### リーリー

ただし、どちらの方法でもタイムアウトを 3 秒 (

time.duration(time.sec * 3))

に変更すると、期待どおりに機能します。

log.infof("elasticsearch url is %v", elasticsearchurl)
    client := &http.client{timeout: time.duration(time.second * 60)}
    req, err := http.newrequest("get", listbackupsurl, nil)
    if err != nil {
        internalerror(w, fmt.sprintf("error creating request: %v", err))
        return
    }
    req.setbasicauth(username, password)
    resp, err := client.do(req)
    if err != nil {
        // handle error
        internalerror(w, fmt.sprintf("error accessing elasticsearch: %v", err))
        return
    }
ログイン後にコピー

解決策問題の原因を絞り込むために、問題を切り分けて可能性を排除します。可能であれば、必要な部分だけを処理できるように、コードの小さなスニペットを使用してください。

インフラストラクチャをテストするには、

httpstat

を使用すると、リモート タイムアウトをシミュレートできます。例: ### リーリー

現時点で

dial tcp ip:port: i/o timeout

タイムアウトを受信した場合は、オペレーティング システムとファイアウォールを確認する必要があります。 Go で設定したタイムアウトは OS のデフォルトを上書きする必要がありますが、この方法でタイムアウトが発生する場合は、ファイアウォール (ローカルまたはリモート) が原因である可能性があります。 また、外部から接続できる場合は es がタイムアウトする可能性がありますが、ドキュメントによれば es から直接エラー メッセージが表示されることが予想されます。 es

のタイムアウトを URL に直接設定してテストできます。 ### お役に立てれば。

以上がなぜ net/http は 30 秒を超えるタイムアウト期間を考慮しないのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!