为什么在 go1.16 上为传输配置 ReadIdleTimeout HTTP/2 选项?

google api golang 客户端,我们注意到

google-api-go-client/transport/http/configure_http2_go116.go


//go:build go1.16

// +build go1.16


...

// configureHTTP2 configures the ReadIdleTimeout HTTP/2 option for the

// transport. This allows broken idle connections to be pruned more quickly,

// preventing the client from attempting to re-use connections that will no

// longer work.

func configureHTTP2(trans *http.Transport) {

    http2Trans, err := http2.ConfigureTransports(trans)

    if err == nil {

        http2Trans.ReadIdleTimeout = time.Second * 31

    }

}


而在这个文件中google-api-go-client/transport/http/configure_http2_not_go116.go 


//go:build !go1.16

// +build !go1.16


// configureHTTP2 configures the ReadIdleTimeout HTTP/2 option for the

// transport. The interface to do this is only available in Go 1.16 and up, so

// this performs a no-op.

func configureHTTP2(trans *http.Transport) {}

Pernet/http2/transport.go是ConfigureTransport很久以前添加的。


// ConfigureTransport configures a net/http HTTP/1 Transport to use HTTP/2.

// It returns an error if t1 has already been HTTP/2-enabled.

//

// Use ConfigureTransports instead to configure the HTTP/2 Transport.

func ConfigureTransport(t1 *http.Transport) error {

为什么在 go1.16 上为传输配置 ReadIdleTimeout HTTP/2 选项?


当年话下
浏览 95回答 1
1回答

繁星点点滴滴

在golang.org/x/net/http2包中有两个类似的探测函数,它们的作用非常不同:func ConfigureTransport&nbsp; (t1 *http.Transport) errorfunc ConfigureTransports (t1 *http.Transport) (*Transport, error)我认为您将前者与后者混淆了。来自问题跟踪器:&nbsp;https ://go-review.googlesource.com/c/net/+/264017非常相似的名称是不幸的,但它们会在 godoc 中彼此相邻排序,并且复数的 ConfigureTransports 暗示了它的用途:它允许您配置 http 和 http2 传输。ConfigureTransports仅在一年前推出:commit 08b38378de702b893ee869b94b32f833e2933bd2Author: Damien Neil <dneil@google.com>Date:&nbsp; &nbsp;Tue Oct 20 12:34:04 2020 -0700&nbsp; &nbsp; http2: add ConfigureTransports&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; The ConfigureTransport function doesn't provide any way to get at the&nbsp; &nbsp; http2 Transport it creates, making it impossible to configure transport&nbsp; &nbsp; parameters such as ReadIdleTimeout.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go