HTTP リクエストに応答するとき、バックグラウンドでペイロードを処理する必要がある場合があります。ノンブロッキング応答で応答しながら。これは、リクエストを閉じて goroutine を開始して処理を続行することで実現できます。
提供されたコード サンプルでは、ステータス コードを 202 Accepted に設定して、次のことを示しています。リクエストはバックグラウンド処理のために受け入れられます。リクエストを適切に閉じるには、以下に示すように、ヘッダーを記述して goroutine を開始するだけです。
<code class="go">func index(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusAccepted) go sleep() }</code>
一部の開発者は、書き込み後にリクエスト ハンドラーから戻ることを推奨しています。ヘッダーとゴルーチンの開始。ただし、これは必須ではなく、省略することもできます。ハンドラーから戻ると、リクエストの完了が自動的に通知され、それに割り当てられたリソースが解放されます。
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 サイトの他の関連記事を参照してください。