gpt4 book ai didi

go - 如何用 Go 编程语言处理并行 HTTP 请求?

转载 作者:IT老高 更新时间:2023-10-28 13:09:49 26 4
gpt4 key购买 nike

我在玩 go HTTP 包。我想像在 java 中那样并行处理请求。但我做不到。

我创建了一个简单的 web 服务器,中间设置了一个 sleep 并意识到 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")
}

由于我想并行处理这两个请求,我在“sayHello”函数中的“processRequest(c, req)”之前添加了“go”命令,以便在不同的 gorutine 中处理每个请求。但是......它不起作用......我不知道为什么。我知道这两个请求都已处理,因为我在控制台上看到了打印行,但浏览器一直在等待信息.....并且不显示我的响应。

所以...我的问题,

每个请求是否都会创建一个新的 http.ResponseWriter?或者它的用途相同?你知道如何指示 Web 服务器使用不同的线程处理每个请求吗?

欢迎任何帮助....

福斯卡

最佳答案

自动同时处理所有连接。每个 TCP 连接(不是请求)都有自己的 goroutine。

在一个使用 http 管道和重用连接的浏览器的世界中,这可能并不总是很好。很可能您的浏览器正在重用一个连接,该连接会停止,直到 goroutine 正在处理的当前请求完成。

关于go - 如何用 Go 编程语言处理并行 HTTP 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11197906/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com