以前的标题:如何为每个 HTTP 请求生成 goroutine?
下面的代码是一个简单的 HTTP 服务器,它将路径回显给请求者。我用它来测试包的ListenAndServe方法是否net/http默认触发一个 goroutine 来处理每个请求;我发现它没有。如果我同时发出三个请求,第一个需要 10 秒返回,第二个需要 20(第一个返回后 10 秒),第三个需要 30 秒。
package main
import (
"fmt"
"net/http"
"time"
)
func handler(w http.ResponseWriter, r *http.Request) {
time.Sleep(10000 * time.Millisecond)
fmt.Fprint(w, r.URL.Path)
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
基本上我想要的是主 goroutine 来监听 HTTP 连接,然后将请求的读取和响应传递给另一个 goroutine 中产生的处理程序。
有人可以为我指出实现这一目标的正确方向吗?最好net/http在 go 中使用包。
更新 12/21/15 08:46 AM MST
我进行了与您使用 Web 浏览器 (chrome 47) 所做的完全相同的测试,在 localhost:8080 的根目录下进行了五个请求,结果大致如下:
1st: 10 seconds
2nd: 20 seconds
3rd: 30 seconds
4th: 36 seconds
5th: 38 seconds
因此,希望那些否则会否决我的问题的人会理解我的困惑以及我为什么做出这样的假设。我不知道为什么我得到了我在第 4 次和第 5 次请求中所做的结果。
我使用 curl 运行了相同的测试,结果与@tomasz 相同。
我正在使用go1.2.1.
慕雪6442864
相关分类