なぜ 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 サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









OpenSSLは、安全な通信で広く使用されているオープンソースライブラリとして、暗号化アルゴリズム、キー、証明書管理機能を提供します。ただし、その歴史的バージョンにはいくつかの既知のセキュリティの脆弱性があり、その一部は非常に有害です。この記事では、Debian SystemsのOpenSSLの共通の脆弱性と対応測定に焦点を当てます。 Debianopensslの既知の脆弱性:OpenSSLは、次のようないくつかの深刻な脆弱性を経験しています。攻撃者は、この脆弱性を、暗号化キーなどを含む、サーバー上の不正な読み取りの敏感な情報に使用できます。

Go Crawler Collyのキュースレッドの問題は、Go言語でColly Crawler Libraryを使用する問題を調査します。 �...

バックエンド学習パス:フロントエンドからバックエンドへの探査の旅は、フロントエンド開発から変わるバックエンド初心者として、すでにNodeJSの基盤を持っています...

Go言語での文字列印刷の違い:printlnとstring()関数を使用する効果の違いはGOにあります...

この記事では、Debianシステムの下でPostgreSQLデータベースを監視するためのさまざまな方法とツールを紹介し、データベースのパフォーマンス監視を完全に把握するのに役立ちます。 1. PostgreSQLを使用して監視を監視するビューPostgreSQL自体は、データベースアクティビティを監視するための複数のビューを提供します。 PG_STAT_REPLICATION:特にストリームレプリケーションクラスターに適した複製ステータスを監視します。 PG_STAT_DATABASE:データベースサイズ、トランザクションコミット/ロールバック時間、その他のキーインジケーターなどのデータベース統計を提供します。 2。ログ分析ツールPGBADGを使用します

redisstreamを使用してGo言語でメッセージキューを実装する問題は、GO言語とRedisを使用することです...

Beegoormフレームワークでは、モデルに関連付けられているデータベースを指定する方法は?多くのBEEGOプロジェクトでは、複数のデータベースを同時に操作する必要があります。 Beegoを使用する場合...
