为了账号安全,请及时绑定邮箱和手机立即绑定

在 Golang 中,是 http.HandleFunc 块吗?

在 Golang 中,是 http.HandleFunc 块吗?

Go
慕慕森 2021-06-15 17:01:49
我在 Golang 中编写了一个 httpserver,但是我发现当来自 Web 浏览器的多个请求时 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塔肯斯那很奇怪。当我从 chrome 请求相同的 url 时,发送两个请求不是同时处理,但使用 cur 测试可以同时处理。但是当我发送两个请求使用不同的 url 时,它可以同时处理。[root@localhost httpserver]# ./httpServer服务器开始工作...1374301593 路径 /query?form=chrome1374301612 路径 /query?from=cur21374301614 路径 /query?from=cur11374301618 路径 /query?form=chrome1374301640 路径 /query?form=chrome21374301643 路径 /query?form=chrome1*1374301715 路径 /query?form=chrome1374301725 路径 /query?form=chrome***1374301761 路径 /query?form=chrome11374301763 路径 /query?form=chrome2**
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 169 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信