着信HTTPリクエストでは、ペイロードをバックグラウンドで処理し続けながら、202 Acceptedステータスコードで応答する必要がありました。リクエストを適切に閉じてバックグラウンドで処理を続ける方法
package main
import (
"fmt"
"log"
"net/http"
"time"
"github.com/nbari/violetear"
)
func sleep() {
time.Sleep(3 * time.Second)
fmt.Println("done...")
}
func index(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusAccepted)
go sleep()
}
func main() {
router := violetear.New()
router.HandleFunc("*", index)
http.Handle("/", router)
log.Fatal(http.ListenAndServe(":8080", router))
}
基本的に、私はちょうどゴルーチン内WriteHeader
以降の呼び出しsleep
機能を使用し、ハンドラに:場合
func index(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusAccepted)
go sleep()
}
私は希望例示の目的のために、これは私が現在やっているものです「200 OK」で応答したいと、私は例えば、単純なリターン、できることに気づく:私は常に返す必要がある場合
func index(w http.ResponseWriter, r *http.Request) {
go sleep()
return
}
。したがって不思議を私は閉じるようにしたい:
func index(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusAccepted)
go sleep()
return
}
それともヘッダを書き込むことによって、およびゴルーチンを呼び出して、次は十分です。