gpt4 book ai didi

Golang 如何阻止 Http 请求继续触发

转载 作者:IT王子 更新时间:2023-10-29 01:44:53 26 4
gpt4 key购买 nike

我今天早些时候在做一些负载测试,发现了一些奇怪的东西,有时一个 Http 请求不会死掉并且一直在触发。我怎样才能在我的 Golang 代码中更正它,例如,请参见下图。我正在对加载 1,000 个 HTTP 请求进行负载测试,但如果您注意到下面的第 1,000 个请求需要 392,999 毫秒或 392 秒,而其余请求平均需要 2.2 秒 .我已经做过多次测试,有时它会挂起。这是我的代码

func Home_streams(w http.ResponseWriter, r *http.Request) {
var result string

r.ParseForm()

wg := sync.WaitGroup{}

wg.Add(1)
go func() {


defer wg.Done()

db.QueryRow("select json_build_object('Locations', array_to_json(array_agg(t))) from (SELECT latitudes,county,longitudes,"+
"statelong,thirtylatmin,thirtylatmax,thirtylonmin,thirtylonmax,city"+
" FROM zips where city='Orlando' ORDER BY city limit 5) t").Scan(&result)

}()
wg.Wait()

fmt.Fprintf(w,result)
}

然后我用这段代码连接到数据库

func init() {
var err error
db, err = sql.Open("postgres","Postgres Connection String")

if err != nil {
log.Fatal("Invalid DB config:", err)
}
if err = db.Ping(); err != nil {
log.Fatal("DB unreachable:", err)
}
}

我会说大约 10% 的时间在我进行负载测试时会发生此问题,并且它停止的唯一方法是我手动停止请求,否则它会无限期地继续下去。我想知道这里是否解决了这个问题 https://medium.com/@nate510/don-t-use-go-s-default-http-client-4804cb19f779#.83uzpsp24我仍在学习使用 Golang 的方法。 enter image description here

最佳答案

and the only way it stops is if I stop the requests manually otherwise it keeps on going indefinitely

您没有显示完整的代码,但您似乎正在使用 http.ListenAndServe 便利功能,该功能未设置默认超时。所以我假设正在发生的事情是你的数据库服务器过载并且你的 http 服务器没有设置为超时所以它只是在等待你的数据库响应。

假设所有这些都是正确的,请尝试做这样的事情:

srv := &http.Server{  
ReadTimeout: 5 * time.Second,
WriteTimeout: 10 * time.Second,
}
srv.ListenAndServe()

有一个很好的引用 here .

关于Golang 如何阻止 Http 请求继续触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42080450/

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