Я пишу httpserver в Голанге, но я нахожу, что http.HandleFunc будет блокироваться, когда много запросов от веб-браузера. как я могу заставить сервер обрабатывать несколько запросов в одно и то же время? Благодарю.В Голанге есть блок http.HandleFunc?
мой код:
func DoQuery(w http.ResponseWriter, r *http.Request) {
r.ParseForm()
fmt.Printf("%d path %s\n", time.Now().Unix(), r.URL.Path)
time.Sleep(10 * time.Second)
fmt.Fprintf(w, "hello...")
//why this function block when multi request ?
}
func main() {
fmt.Printf("server start working...\n")
http.HandleFunc("/query", DoQuery)
s := &http.Server{
Addr: ":9090",
ReadTimeout: 30 * time.Second,
WriteTimeout: 30 * time.Second,
//MaxHeaderBytes: 1 << 20,
}
log.Fatal(s.ListenAndServe())
fmt.Printf("server stop...")
}
Я побежал ваш код и все работало, как ожидалось. Я сделал два запроса одновременно (curl localhost: 9090/query), и оба они закончили через 10 секунд вместе. Может быть, проблема в другом месте? Вот команда, которую я использовал: time curl -s localhost: 9090/query | Эхо $ (завиток -s локальный: 9090/запрос) - tjameson
thakns
это странно. , когда я запрашиваю один и тот же URL из хром, отправлю два запроса не обрабатывать в одно и то же время, но использовать cur test можно обрабатывать в одно и то же время. , но когда я отправляю два запроса, используйте другой URL-адрес, он может быть обработан в одно и то же время.
[корень @ локальный HTTPServer] # ./httpServer начать работать
сервера ...
1374301593 путь/запрос? Форма = хром
1374301612 путь/запрос? Из = cur2
1374301614 путь/запроса? из = cur1
1374301618 путь/запроса? форма = хром
1374301640 путь/запрос? Форма = chrome2
1374301643 путь/запрос? Форма = chrome1
* 1374301715 путь/запрос? Форма = хром
1374301725 путь/запрос? Форма = хром *
** 1374301761 путь/запроса? форма = chrome1
1374301763 путь/запроса? форма = chrome2 **
мой Go версия: идти версия go1.1.1 линукс/386 – user2601460
Что вы имеете в виду, блокируя? Какое поведение вы видите неожиданным? –
Я отправляю два запроса в веб-браузере одновременно. второй запрос был обработан через 10 секунд. сервер начнет работать ... 1374289669 путь/запрос 1374289679 путь/запрос Я хочу два запроса ручки в то же время, как 1374289669 путь/запрос 1374289669 путь/запрос – user2601460