超时

例程timeout

超时模式防止远程过程调用无限期的等待一个响应。超时指定了RPC必须在多长时间内返回。如果超时时间内没有响应,RPC发起一个回滚机制,不论是重试、抛出一个异常或者其他什么操作。该模式可能是RPC中使用的最基础的、基本适应性的模式。

服务器

你可以使用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

客户端

客户端有两种方式设置超时。

一种是设置连接的读/写截止时间,另一种是使用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上下文

results matching ""

    No results matching ""