私は go HTTP パッケージで遊んでいました。Javaで行うように、リクエストを並行して処理したかったのです。しかし、私はできませんでした。
私は単純な Web サーバーを作成し、途中でスリープ状態にし、一度に 1 つのリクエストを処理することに気付きました。そのため、ブラウザで更新を行った場合、最初のリクエストのプロセスは、2 番目のリクエストの処理が開始されるまで終了する必要があります。コードは次のとおりです。
func main(){
//Process the http commands
fmt.Printf("Starting http Server ... ")
http.Handle("/", http.HandlerFunc(sayHello))
err := http.ListenAndServe("0.0.0.0:8080", nil)
if err != nil {
fmt.Printf("ListenAndServe Error",err)
}
}
func sayHello(c http.ResponseWriter, req *http.Request) {
fmt.Printf("New Request\n")
processRequest(c, req)
}
func processRequest(w http.ResponseWriter, req *http.Request){
time.Sleep(time.Second*3)
w.Write([]byte("Go Say’s Hello(Via http)"))
fmt.Println("End")
}
両方のリクエストを並行して処理したかったので、異なる gorutine で各リクエストを処理するために、「sayHello」関数の「processRequest(c, req)」の前に「go」コマンドを追加しました。でも...うまくいかない....理由はわかりません。コンソールに印刷された行が表示されるため、両方の要求が処理されていることがわかりますが、ブラウザーは情報を待機し続けます.....そして応答を表示しません。
それで...私の質問は、
各リクエストは新しい http.ResponseWriter を作成しますか? それとも同じものを使用していますか?各リクエストを異なるスレッドで処理するように Web サーバーに指示する方法を知っていますか?
どんな助けも大歓迎です....
フェルスカ