返回介绍

3.6 超时

发布于 2020-10-24 07:04:30 字数 3316 浏览 1016 评论 0 收藏 0

示例: timeout

超时机制可以保护服务调用陷入无限的等待之中。超时定义了服务的最长等待时间,如果在给定的时间没有相应,服务调用就进入下一个状态,或者重试、或者立即返回错误。

Server

你可以使用OptionFn设置服务器的 readTimeoutwriteTimeout

```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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文