Golang如何停止继续发出的Http请求

罗马托雷斯:

我今天早些时候进行了一些负载测试,发现了一些奇怪的东西,有时Http请求不会死,并且会不断触发。例如,如何在我的Golang代码中更正此错误,请参见下图。我正在加载1000个HTTP请求的负载测试,但是如果您注意到下面的第1000个请求,则需要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的方法。在此处输入图片说明

杰克:

并且它停止的唯一方法是如果我手动停止请求,否则它会无限期继续

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

假设所有这些都是正确的,请尝试执行以下操作:

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

有一个很好的参考这里

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章