HTTP 客户端,空闲超时
HTTP client, idle timeout
如何在 Go HTTP 客户端中设置空闲超时?
空闲超时意味着从 HTTP 客户端内部调用 Conn 接口的 Read/Write 方法超时。当客户端下载文件并且在某些时候由于读取超时而导致下载失败时,它会很有用。
您需要创建自己的 net.Dialer
,即 returns 和 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)
}
如何在 Go HTTP 客户端中设置空闲超时?
空闲超时意味着从 HTTP 客户端内部调用 Conn 接口的 Read/Write 方法超时。当客户端下载文件并且在某些时候由于读取超时而导致下载失败时,它会很有用。
您需要创建自己的 net.Dialer
,即 returns 和 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)
}