2015-01-05 124 views
0

如何在Go HTTP客戶端中設置空閒超時?HTTP客戶端,空閒超時

空閒超時是指調用來自HTTP客戶端內部的Conn接口的讀/寫方法的超時。客戶端下載文件時可能很有用,並且由於讀取超時已到,下載失敗。

+0

一些相關鏈接:http://blog.golang.org/go-concurrency-patterns-timing-out-and和https:// gobyexample。 com/timeouts – Simon

回答

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) 
} 
+0

謝謝!現在我明白了,該怎麼做。 –