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

echo_return
  • 235
上海市

如图:

回复
阅读 821
2 个回答

设置timeout
看情况禁用keep-alived

夜游神
  • 98
浙江

仅从楼主截图中的报错信息看,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)
}
宣传栏