golang httpリクエストのタイムアウト

WBOY
リリース: 2023-05-13 10:37:07
オリジナル
2300 人が閲覧しました

golang を使用して http サービスを開発する場合、リクエストのタイムアウトの問題が発生する可能性があります。この種の問題はサービスの安定性と信頼性に影響を与える可能性があるため、解決策を見つける必要があります。この記事では、golangのhttpリクエストのタイムアウト問題とその解決策を紹介します。

  1. 問題の説明

http サービスでは、リクエストのタイムアウトが一般的な問題です。たとえば、クライアントがリクエストを送信したときに、指定された時間内にサーバーが応答しない場合、または応答中にエラーが発生した場合、リクエストはタイムアウトになります。

golang では、この問題は Client の Timeout 属性または http.Transport の Timeout 属性を設定することで解決できます。

  1. Set Client Timeout

http.Golang の Client は、リクエストのタイムアウトを設定するための Timeout 属性を提供します。デフォルトでは、Timeout プロパティはゼロに設定されており、タイムアウト制限がないことを示します。 Timeout 属性がゼロ以外の値に設定されている場合、サーバーは指定された時間内に応答を待ちます。

たとえば、次のコードは 2 秒のタイムアウト制限を設定します。

client := &http.Client{
    Timeout: time.Second * 2,
}
ログイン後にコピー

リクエストがタイムアウトすると、タイムアウト エラーが返されます (net/http: request cancels (ヘッダーの待機中に Client.Timeout を超過しました))。実際のニーズに応じて、エラーをスローしたり処理したりできます。

  1. http.Transport のタイムアウトを設定する

http.Client の Timeout プロパティを設定することに加えて、http.Transport のプロパティを設定して要求のタイムアウトを制御することもできます。 。具体的には、DialTimeout、TLSHandshakeTimeout、ResponseHeaderTimeout、ExpectContinueTimeout などのプロパティを設定できます。

たとえば、次のコードは DialTimeout を 2 秒に設定します。

transport := &http.Transport{
    DialContext: (&net.Dialer{
        Timeout:   2 * time.Second,
        KeepAlive: 30 * time.Second,
    }).DialContext,
    MaxIdleConns:        100,
    IdleConnTimeout:     90 * time.Second,
    TLSHandshakeTimeout: 2 * time.Second,
}
client := &http.Client{
    Timeout:   time.Second * 2,
    Transport: transport,
}
ログイン後にコピー

タイムアウトが発生すると、タイムアウト エラー (dial tcp: i/o timeout) が発生します。返される。実際のニーズに応じて、エラーをスローしたり処理したりできます。

  1. 概要

golang では、リクエスト タイムアウトの設定は、サービスの安定性と信頼性を確保するための重要な手段です。リクエストのタイムアウト制御は、http.Client の Timeout プロパティまたは http.Transport のプロパティを設定することで実現できます。実際の開発では、サービスが正常に動作するために要件に応じて適切なタイムアウトを設定する必要があります。

以上がgolang httpリクエストのタイムアウトの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート