ホームページ >バックエンド開発 >Golang >goでhttpポートを閉じるにはどうすればよいですか?

goでhttpポートを閉じるにはどうすればよいですか?

王林
王林転載
2024-02-09 17:24:19700ブラウズ

goでhttpポートを閉じるにはどうすればよいですか?

Go 言語では、HTTP ポートを閉じるには、`http.Server` の `Close()` メソッドを使用します。まず、`http.Server` インスタンスを作成し、指定されたポートでリッスンする必要があります。サーバーが実行されたら、「Close()」メソッドを呼び出してサーバーを停止できます。これにより、実行中の HTTP サーバーが即時に停止し、リスニング ポートが解放されます。さらに、セマフォを使用して HTTP サーバーを正常にシャットダウンすることもできます。たとえば、「os.Interrupt」信号を使用して Ctrl C イベントをキャプチャし、信号の受信時にサーバーをシャットダウンします。つまり、Go 言語は HTTP ポートを閉じるためのシンプルかつ柔軟な方法を提供し、サーバーの動作をより適切に制御できるようにします。

質問内容

私は、簡単な Web アプリケーションを作成することを学びました。しかし、goでlocalhostを起動するたびに(ターミナルでプロセスを停止したとしても)、ポートは閉じられません。では、どうやってオフにすればよいのでしょうか。

これがコードです

リーリー

オンラインで調べましたが解決策が見つからなかったので、助けていただければ幸いです。ありがとうございます

SOLUTION

まず重要なことは、質問を言い換えて、何を求めているのかを本当に理解することだと思います。 閉じられた http ポートなどというものはありません。 これは、http サーバーが非常に高いレベルでどのように動作するかです:

  1. したがって、http サーバーに特定のポートでのリッスンを開始するように要求するときは、基本的に、エンドポイントを表すインターネット ソケットを作成するようにオペレーティング システムに要求することになります。エンドポイントとは、ip:port を意味します。

  2. http 1、1.1、および 2 の場合、ソケットは具体的には TCP インターネット ソケットです。

  3. ソケットは待機フェーズで実行されており、受信接続要求を待機しています。受信リクエストを受信した場合、カーネルは単に 3 ウェイ TCP ハンドシェイクを実行し、ハンドシェイクが成功した後、カーネルは接続オブジェクトを作成し、バックエンド アプリケーションを表すプロセスに渡します。そこでバックエンド アプリケーションであらゆるリクエストがリッスンされます。新しい接続が作成されます。 。 したがって、ポートが常にシステムに存在していることがわかります。http サーバーを開始したときに新しいポートを作成しませんでしたが、基本的にインターネット ソケット オブジェクトを作成し、新しい接続とハンドリングのためにポートのリッスンを開始するようにカーネルに要求しました。接続の作成時にバックエンド アプリケーションに送信されます。 つまり、あなたは基本的に、そのエンドポイントでのリッスンを停止し、そのインターネットソケットを削除するようにカーネルに依頼する方法を私に尋ねているのです。 以下は、これを行う方法のアイデアを提供する大まかなコード スニペットです。

    リーリー

以上がgoでhttpポートを閉じるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。