golang HTTP 请求超时该如何解决?

echo_return
  • 235
上海市

如图:

回复
阅读 1.2k
2 个回答

设置timeout
看情况禁用keep-alived

夜游神
  • 521
浙江

仅从楼主截图中的报错信息看,http.Client 设置的 Timeount 超时。

Timeount 在发起一个 http 请求前设置一个定时器,在请求返回时关闭定时器。

假设对应的服务端确实是正常工作,只是耗费的时间较久,可以考虑延长超时时间或设置成没有超时。

package main

import (
    "fmt"
    "net/http"
    "time"
)

func main() {
    // 不使用默认的 http.Get,手动设置 client 的 Timeout
    // Timeout 默认值为0,表示不设置超时
    client := &http.Client{Timeout: 5 * time.Second}

    // 一个 http.Client 实质上相当于一个 tcp 连接池
    // 所以建议是复用 client
    // 多个并发请求的 Timeout 是分别自动设置的,互相不影响
    go func() {
        url1 := ""
        resp, err := client.Get(url1)
        fmt.Println(resp, err)
    }()
    go func() {
        url2 := ""
        resp, err := client.Get(url2)
        fmt.Println(resp, err)
    }()

    // 默认的 http.Get,实际使用了 DefaultClient = &Client{},没有设置 Timeout
    resp, err := http.Get("")
    fmt.Println(resp, err)
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏