Как обрабатывать параллельный HTTP-запрос на языке программирования go?

Я играл с 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

9
задан Fersca 25 June 2012 в 21:53
поделиться