ホームページ >バックエンド開発 >Golang >Go net/http サーバーがリッスンを開始したことを検出するにはどうすればよいですか?

Go net/http サーバーがリッスンを開始したことを検出するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-06 17:15:15942ブラウズ

How Can I Detect When My Go net/http Server Starts Listening?

HTTP サーバーのリッスン開始の検出

net/http パッケージを使用して HTTP サーバーを初期化する場合、サーバーの状態。サーバーがシャットダウンするまで実行される ListenAndServe 関数とは異なり、サーバーの起動とリスニング段階を検出する簡単なメカニズムはないようです。

カスタム アプローチ

与えられた明示的な通知チャネルがない場合は、カスタム ソリューションが必要です。 ListenAndServe ヘルパー関数をバイパスすることで、リスニング ソケットを手動で開くことができます。ソケットが確立されると、http.Serve でサーバーを起動でき、シグナリング プロセスを制御できるようになります。このアプローチを示すコード スニペットは次のとおりです。

l, err := net.Listen("tcp", ":8080")
if err != nil {
    // handle error
}

// Signal server's listening status.
// Closing the done channel indicates server is listening.

done := make(chan bool)
go func() {
    err := http.Serve(l, rootHandler)
    if err != nil {
        // handle error
    }
    close(done)
})()

// Wait for the done channel to close, indicating the server is listening.

<-done

このアプローチにより、サーバーのリスニング ステータスを明示的に制御できます。完了チャネルを監視すると、サーバーが受信接続を受け入れる準備ができたときに通知を受け取ることができます。

以上がGo net/http サーバーがリッスンを開始したことを検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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