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

Golang如何阻止Http请求继续激发,go,Go,今天早些时候,我做了一些负载测试,发现了一些奇怪的事情,有时Http请求并没有消失,而是持续启动。我如何在我的Golang代码中纠正这个问题,例如,请参见下图。我正在加载1000个HTTP请求进行负载测试,但是如果您注意到下面的第1000个请求需要392999毫秒或392秒,而其余请求平均需要2.2秒。我做了多次测试,有时会挂起。这是我的密码 func Home_streams(w http.ResponseWriter, r *http.Request) { var result st

今天早些时候,我做了一些负载测试,发现了一些奇怪的事情,有时Http请求并没有消失,而是持续启动。我如何在我的Golang代码中纠正这个问题,例如,请参见下图。我正在加载1000个HTTP请求进行负载测试,但是如果您注意到下面的第1000个请求需要392999毫秒或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%的时间会发生这个问题,它停止的唯一方式是如果我手动停止请求,否则它会无限期地继续下去。我想知道这个问题是否在这里得到了解决,我仍在学习如何绕过Golang。

它停止的唯一方法是手动停止请求,否则 它无限期地继续下去

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

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

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

有一个很好的参考资料。

这正是它的完美之处,是的,我正在使用http.ListenAndServe(“:8000”,nil)。谢谢。