2015-01-05 2 views
0

Как сделать тайм-аут простоя в HTTP-клиенте Go?HTTP-клиент, тайм-аут простоя

Idle timeout означает тайм-аут при вызове методов чтения/записи интерфейса Conn от внутренних клиентов HTTP. Это может быть полезно, когда клиент загружает файл и в какой-то момент загрузка не выполняется, потому что тайм-аут чтения достигнут.

+0

Некоторые соответствующие ссылки: http://blog.golang.org/go-concurrency-patterns-timing-out-and и https: // gobyexample. com/таймаут – 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

Спасибо! Теперь я понимаю, что делать. –

 Смежные вопросы

  • Нет связанных вопросов^_^