超时
例程:timeout
超时模式防止远程过程调用无限期的等待一个响应。超时指定了RPC必须在多长时间内返回。如果超时时间内没有响应,RPC发起一个回滚机制,不论是重试、抛出一个异常或者其他什么操作。该模式可能是RPC中使用的最基础的、基本适应性的模式。
服务器
你可以使用OptionFn
来设置服务器的readTimeout
和writeTimeout
。
// go server struct
type Server struct {
...
readTimeout time.Duration
writeTimeout time.Duration
...
}
OptionFn
方法是:
// go
func WithReadTimeout(readTimeout time.Duration) OptionFn
func WithWriteTimeout(writeTimeout time.Duration) OptionFn
客户端
客户端有两种方式设置超时。
一种是设置连接的读/写截止时间,另一种是使用context.Context
。
读/写截至时间
客户端的选项有三个选项设置超时:
type Option struct {
……
//ConnectTimeout sets timeout for dialing
ConnectTimeout time.Duration
// ReadTimeout sets readdeadline for underlying net.Conns
ReadTimeout time.Duration
// WriteTimeout sets writedeadline for underlying net.Conns
WriteTimeout time.Duration
……
}
DefaultOption设置ConnectTimeout为10秒,但是没有设置ReadTimeout和WriteTimeout。如果超时没有设置,那么访问就没有超时。
context.Context
context.Context
从Go 1.7开始可以用于超时控制。
你需要使用context.WithTimeout
来包装go上下文