- Part Ⅰ 开发起步
- Part Ⅱ 注册中心
- Part Ⅲ 特性
- Part Ⅳ 插件
- Part Ⅴ 其它
- Part Ⅵ 网关
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
3.6 超时
示例: timeout
超时机制可以保护服务调用陷入无限的等待之中。超时定义了服务的最长等待时间,如果在给定的时间没有相应,服务调用就进入下一个状态,或者重试、或者立即返回错误。
Server
你可以使用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
Client
客户端有两种方式可是超时。
一种是设置连接的 read/write deadline, 一种是使用 context.Context
.
read/write deadline
Client的 Option
可以设置连接的超时值:
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
设置连接超时值为 10 秒,但是没有设置 ReadTimeout 和 WriteTimeout。 如果没有设置,则不会有超时限制。
由于多个服务可能共用同一个节点,有可能出现多个服务调用互相影响的状况。
context.Context
context.Context
也可以用来控制超时。
你可以使用context.WithTimeout
来设置超时时间,这是推荐的设置超时的方式。
func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论