ホームページ >バックエンド開発 >Golang >Go の Context パッケージは POST リクエストのキャンセル処理をどのように改善できるでしょうか?

Go の Context パッケージは POST リクエストのキャンセル処理をどのように改善できるでしょうか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-04 00:12:11451ブラウズ

How Can Go's Context Package Improve POST Request Cancellation Handling?

http コンテキストに移動し、POST リクエストでキャンセルをリクエストする

クライアントが本文なしで GET リクエストを送信すると、サーバーはそれを検出できます。クライアントが接続を閉じたときのキャンセル信号。これは、リクエスト本文を読み取り、クライアントが切断されたことを検出することで実現されます。

ただし、クライアントがリクエスト本文を含む POST リクエストを送信すると、サーバーはキャンセル信号を即座に検出できません。これは、アプリケーションが明示的に行うまで、サーバーはリクエスト本文の読み取りを開始しないためです。その結果、サーバーはリクエストの期限が来るまでキャンセル信号をキャプチャできません。

この問題に対処し、Go コンテキスト パッケージでキャンセルを適切に処理するには、リクエストの本文をすぐに読み取ります 。これにより、サーバーはクライアントが切断されたことを検出し、不要な作業をできるだけ早くキャンセルできるようになります。 POST リクエストの本文を読み取ることで、サーバーの接続チェックがトリガーされ、接続の読み取りが開始され、閉じられた接続が検出されます。

ここでは、コードを変更してリクエストの本文を読み取り、キャンセル信号の即時送信:

func handler(w http.ResponseWriter, r *http.Request) {
    go func(done <-chan struct{}) {
        <-done
        fmt.Println("message", "client connection has gone away, request got cancelled")
    }(r.Context().Done())

    io.Copy(ioutil.Discard, r.Body) // Read the body
    time.Sleep(30 * time.Second)
    fmt.Fprintf(w, "Hi there, I love %s!\n", r.URL.Path[1:])
}

リクエスト本文を明示的に読み取ることで、サーバーはクライアントが接続を閉じるとすぐにキャンセル信号を検出でき、サーバー上のリソースをタイムリーに解放できます。側面。

以上がGo の Context パッケージは POST リクエストのキャンセル処理をどのように改善できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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