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