ホームページ >バックエンド開発 >Golang >Go でバックグラウンド処理の HTTP リクエストを適切に閉じるにはどうすればよいですか?

Go でバックグラウンド処理の HTTP リクエストを適切に閉じるにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-29 21:19:301029ブラウズ

How to Properly Close an HTTP Request for Background Processing in Go?

バックグラウンド処理のリクエストを適切に閉じる方法

はじめに

HTTP リクエストに応答するとき、バックグラウンドでペイロードを処理する必要がある場合があります。ノンブロッキング応答で応答しながら。これは、リクエストを閉じて goroutine を開始して処理を続行することで実現できます。

202 Accepted による応答終了

提供されたコード サンプルでは、​​ステータス コードを 202 Accepted に設定して、次のことを示しています。リクエストはバックグラウンド処理のために受け入れられます。リクエストを適切に閉じるには、以下に示すように、ヘッダーを記述して goroutine を開始するだけです。

<code class="go">func index(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(http.StatusAccepted)
    go sleep()
}</code>

リクエスト ハンドラーから戻る

一部の開発者は、書き込み後にリクエスト ハンドラーから戻ることを推奨しています。ヘッダーとゴルーチンの開始。ただし、これは必須ではなく、省略することもできます。ハンドラーから戻ると、リクエストの完了が自動的に通知され、それに割り当てられたリソースが解放されます。

HTTP ステータス 200 OK

200 OK ステータス コードを返す場合は、単純にスリープ メソッドを呼び出すことができます。ステータスコードを設定せずに機能します。ヘッダーが設定されていない場合、サーバーによって 200 OK が自動的に設定されます。

ベスト プラクティス

バックグラウンド処理のリクエストを閉じるためのベスト プラクティスは、ヘッダーを記述してゴルーチンを開始することです。次のコードに示すように:

<code class="go">func index(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(http.StatusAccepted)
    go sleep()
}</code>

サーバーによって再利用される可能性があるため、ハンドラーから戻った後は並行ゴルーチンで http.ResponseWriter 値または httpRequest 値を使用しないように注意してください。

以上がGo でバックグラウンド処理の HTTP リクエストを適切に閉じるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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