gpt4 book ai didi

performance - 发送多个 HTTP 请求的最快方式

转载 作者:IT王子 更新时间:2023-10-29 02:32:41 24 4
gpt4 key购买 nike

我有大约 2000 个用户对象( map )的数组,我需要调用 API 来获取用户详细信息 -> 处理响应 -> 尽快更新我的本地数据库。我使用 Go 的 waitgroup 和 goroutine 来实现并发请求发送方法,但是在我的 2014 Macbook Pro 上调用 2000 个请求大约需要 24 秒。有没有办法让它更快?

var wg sync.WaitGroup

json.Unmarshal(responseData, &users)
wg.Add(len(users))

for i:= 0; i<len(users); i++ {
go func(userid string){
url := "https://www.example.com/user_detail/"+ userid
response, _ := http.Get(url)
defer response.Body.Close()
data, _ := ioutil.ReadAll(response.Body)
wg.Done()
}(users[i]["userid"])
}

wg.Wait()

最佳答案

这种情况通常很难解决。此级别的性能在很大程度上取决于您的服务器、API、网络等的具体情况。但这里有一些帮助您前进的建议:

  1. 尝试限制并发连接数。

    正如@JimB 在评论中提到的,尝试处理 2000 个并发连接对于服务器和客户端来说可能效率低下。尝试限制为 10、20、50、100 个同时连接。对每个值进行基准测试,并进行相应调整,直到获得最佳性能。

    在客户端,这可能允许重新使用连接(从而减少每个请求的平均开销),这在目前是不可能的,因为您要在所有 2000 个连接完成之前启动所有连接。

  2. 如果服务器支持 HTTP/2,请确保您使用的是 HTTP/2,这样效率更高(对于多个请求——所以这实际上也取决于上面的 #1)。请参阅有关 debugging HTTP/2 的文档.

  3. 如果 API 支持批量请求,请利用这一点,并在单个请求中请求多个用户。

关于performance - 发送多个 HTTP 请求的最快方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43349394/

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