Я играл с HTTP-пакетом. Я хотел обрабатывать запрос параллельно, как и в java. Но я не мог.Как обрабатывать параллельный HTTP-запрос в языке программирования go?
Я создал простой веб-сервер, поспав посередине и понял, что нужно обрабатывать один запрос за раз, поэтому, если бы я обновил браузер, процесс первого запроса должен завершиться до второго запроса начать обработку, вот код:
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")
}
Как я хотел обрабатывать оба запроса параллельно я добавил «идут» команду перед «ProcessRequest (с, REQ)» в функции «SayHello» для того, чтобы обработать каждый запросить в другом горитине. Но ... это не работает ... Я не знаю, почему. Я знаю, что оба запроса обработаны, потому что я вижу печатную строку на консоли, но браузер все время ждет информации ..... и не показываю свой ответ.
Итак ... мои вопросы,
создать ли каждый запрос новый http.ResponseWriter? или он использует то же самое? Знаете ли вы, как указать веб-сервер для обработки каждого запроса с помощью разных потоков?
Любая помощь приветствуется ....
Fersca
Спасибо. Так много времени тратилось сегодня только из-за слишком умного поведения браузера :) –