HTTP客户端,空闲超时

时间:2015-01-05 17:14:52

标签: go

如何在Go HTTP客户端中进行空闲超时?

空闲超时意味着从HTTP客户端内部调用Conn接口的读/写方法时超时。当客户端下载文件时,它会很有用,并且在某些时候由于达到读取超时而导致下载失败。

1 个答案:

答案 0 :(得分:1)

您需要创建自己的net.Dialer,返回net.Conn,设置相应的读写截止日期。

Conn看起来像这样:

// Conn wraps a net.Conn, and sets a deadline for every read
// and write operation.
type Conn struct {
    net.Conn
    ReadTimeout  time.Duration
    WriteTimeout time.Duration
}

func (c *Conn) Read(b []byte) (int, error) {
    err := c.Conn.SetReadDeadline(time.Now().Add(c.ReadTimeout))
    if err != nil {
        return 0, err
    }
    return c.Conn.Read(b)
}

func (c *Conn) Write(b []byte) (int, error) {
    err := c.Conn.SetWriteDeadline(time.Now().Add(c.WriteTimeout))
    if err != nil {
        return 0, err
    }
    return c.Conn.Write(b)
}