加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang net http库相关超时的设置

发布时间:2020-12-16 18:51:06 所属栏目:大数据 来源:网络整理
导读:net.http 包中的超时设置 服务端 app.Server.ReadTimeout app.Server.WriteTimeout 是针对所有请求设置的选项 默认 net.http keepalived 开启,超时时间为 3 分钟,如下 1942 type tcpKeepAliveListener struct { 1943 *net.TCPListener 1944 } 1945 1946 fu
net.http 包中的超时设置

服务端

app.Server.ReadTimeout
app.Server.WriteTimeout

是针对所有请求设置的选项

默认 net.http keepalived 开启,超时时间为 3 分钟,如下

1942 type tcpKeepAliveListener struct {
1943 *net.TCPListener
1944 }
1945
1946 func (ln tcpKeepAliveListener) Accept() (c net.Conn,err error) {
1947 tc,err := ln.AcceptTCP()
1948 if err != nil {
1949 return
1950 }
1951 tc.SetKeepAlive(true)
1952 tc.SetKeepAlivePeriod(3 * time.Minute)
1953 return tc,nil
1954 }

没看到保活超时的配置选项,生产环境可以禁掉

针对每一连接,设置超时,可以参考

http://grokbase.com/t/gg/golang-nuts/12czccncw7/go-nuts-net-http-server-readtimeout-and-keep-alive-interaction


客户端

刚才看了下,golang http 库客户端有5个超时设置,一个是 Client 里面的 Timeout,一个是 Client 使用的 Transport 的 ResponseHeaderTimeout,还有三个是 Transport 内部的 Dialer 的超时设置,Timeout,KeepAlive,Deadline。

通过查看 golang 代码发现,在执行 http 请求之前, 如果 Client.Timeout > 0,会使用time.AfterFunc 定义一个回掉函数,超时后调用,此函数会取消正在进行中的请求。

Dialer 的 Timeout 和 Deadline 是连接超时时间,建立连接过程中使用

发送请求,接收响应 分别由两个协程处理。发送请求后,Transport 里的超时时间ResponseHeaderTimeout 开始计时,因此它指的是等待响应的超时时间。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读