Я пишу https-сервер на Golang, но я обнаружил, что 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 | echo $(curl -s localhost:9090/query) – tjameson
спасибо
это странно. когда я запрашиваю один и тот же URL-адрес из chrome, отправьте два запроса, которые не обрабатываются одновременно, но использование cur test может обрабатываться одновременно. но когда я отправляю два запроса, используйте разные URL-адреса, их можно обрабатывать одновременно.
[root@localhost httpsсервер]# ./httpServer
сервер начал работать...
1374301593 путь / запрос? форма = хром
1374301612 путь /запрос?от=cur2
1374301614 путь /запрос?от=cur1
1374301618 путь / запрос? форма = хром
1374301640 путь / запрос? форма = chrome2
1374301643 путь / запрос? форма = chrome1
*1374301715 путь /запрос?форма=хром
1374301725 путь /запрос?форма=хром*
**1374301761 путь /запрос?form=chrome1
1374301763 путь /запрос?form=chrome2**
fmt.Printf("server stop...")
никогда не будет вызван, потому чтоlog.Fatal
завершит процесс: источник - person beatgammit   schedule 20.07.2013curl localhost:9090/query
), и оба они завершились через 10 секунд вместе. Может проблема в другом? Вот команда, которую я использовал:time curl -s localhost:9090/query | echo $(curl -s localhost:9090/query)
- person beatgammit   schedule 20.07.2013