ホームページ  >  記事  >  バックエンド開発  >  Golang でネットワーク タイムアウトを設定する方法を教えてください。

Golang でネットワーク タイムアウトを設定する方法を教えてください。

PHPz
PHPzオリジナル
2023-03-30 09:11:371634ブラウズ

ネットワーク プログラミングを行う場合、遅延の原因となるネットワーク接続のタイムアウトを回避するためにタイムアウトを設定する必要が生じることがよくあります。 Golang でネットワーク タイムアウトを設定するのは非常に簡単です。この記事では、Golang でネットワーク タイムアウトを設定する方法を説明します。

1. Golang のネットワーク タイムアウト

ネットワーク上で通信する場合、プログラムの堅牢性を確保するために、クライアントとサーバーの両方で特定のタイムアウトを設定する必要があります。 Golang では、ネットワーク タイムアウトは 2 つの方法で設定できます。

  1. コンテキスト タイムアウト

コンテキスト パッケージは一般的に使用されるパッケージであり、複数の Goroutine のキャンセルを制御するために使用できます。タイムアウト、期限など。ネットワーク プログラミングで Context を使用する場合、以下に示すように、基になる WithDeadline または WithTimeout メソッドを通じてタイムアウトを設定できます。

ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
defer cancel()

resp, err := http.Get("https://www.baidu.com")
if err != nil {
    log.Fatalln(err)
}
defer resp.Body.Close()

上記のコードでは、WithTimeout メソッドを通じて 5 秒のタイムアウトを持つ Context を設定します。 . .タイムアウトに達すると、コードが時間内に終了できるように、defer cancel() を通じてこのコンテキストをキャンセルします。

  1. net.Dial タイムアウト

Golang では、net.Dial 関数を通じて tcp または udp 接続を作成できます。この関数には、タイムアウトを設定するフォームなど、複数のオーバーロードされたフォームがあります。たとえば、5 秒のタイムアウトで TCP 接続を設定するには、次のように記述できます。

conn, err := net.DialTimeout("tcp", "www.baidu.com:80", time.Second*5)
if err != nil {
    log.Fatalln(err)
}

ここでは、net.DialTimeout 関数を使用して TCP 接続を作成します。 5 秒以内に接続が正常に確立されると、net.Conn オブジェクトが返されます。そうしないと、関数はエラーを返すため、このエラーが返されたらすぐにプログラムを終了する必要があります。

2. タイムアウト方法の選択方法

では、ネットワークプログラミングを行う際のタイムアウト設定はどの方法を選択すればよいのでしょうか?これは、特定のビジネスの状況によって異なります。

一般に、コンテキスト タイムアウトを使用することをお勧めします。これは、コンテキスト タイムアウトを使用すると、ゴルーチン コントロールなどのコードの他の部分に簡単に統合できるためです。さらに、キャンセル機能を使用すると、コンテキストの実行ステータスをより直感的に理解できるようになり、エラーをより適切に処理できるようになります。

ただし、シナリオによっては、net.Dial タイムアウト方式の方が適切な場合もあります。たとえば、http リクエストを行う場合、net/http パッケージの Transport 構造を使用して接続プールを再利用できますが、このとき net.Dial メソッドを使用すると、接続ステータスをより適切に制御できます。

まとめると、実際の開発では、特定のビジネス ニーズに基づいてタイムアウト設定にどの方法を使用するかを決定する必要があります。

3. 概要

この記事の説明を通じて、読者は Golang でネットワーク タイムアウトを設定する方法を習得したと思います。ネットワーク プログラミングを行うときは、ネットワーク接続のタイムアウトによるプログラムのフリーズを避けるために常に注意を払う必要があります。したがって、タイムアウトの設定は非常に必要であり、リーダーはタイムアウトを適用する必要があります。

以上がGolang でネットワーク タイムアウトを設定する方法を教えてください。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。