本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
自定义 HTTP 客户端
适用于 Go 的 AWS SDK 使用带有默认配置值的默认 HTTP 客户端。尽管您可以更改其中的一些配置值,但是对于在高吞吐量和低延迟要求的环境 适用于 Go 的 AWS SDK 中使用的客户,默认的 HTTP 客户端和传输配置不足。有关更多信息,请参阅,常见问题因为配置建议因特定工作负载而异。本节介绍如何配置自定义 HTTP 客户端,以及如何使用该客户端创建 适用于 Go 的 AWS SDK 呼叫。
为了帮助您创建自定义 HTTP 客户端,本节介绍NewBuildableClient
让我们来定义我们要自定义的内容。
在配置加载期间重写
调用LoadDefaultConfigLoadDefaultConfig
。customClient
身份通过:
cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithHTTPClient(customClient))
超时
BuildableHTTPClient
可以配置请求超时限制。此超时包括连接、处理任何重定向和读取完整响应正文的时间。例如,要修改客户端超时,请执行以下操作:
import "github.com/aws/aws-sdk-go-v2/aws/transport/http" // ... httpClient := http.NewBuildableClient().WithTimeout(time.Second*5)
拨号器
BuildableHTTPClient
提供了一种生成器机制,用于使用修改后的拨号器Dialer
设置。
import awshttp "github.com/aws/aws-sdk-go-v2/aws/transport/http" import "net" // ... httpClient := awshttp.NewBuildableClient().WithDialerOptions(func(d *net.Dialer) { d.KeepAlive = -1 d.Timeout = time.Millisecond*500 })
设置
拨号器。 KeepAlive
此设置表示活动网络连接的保持活动时间。
设置为负值可禁用 keep-alives。
如果协议和操作系统支持,则设置为 0 以启用 keep-alive。
不支持 keep-alive 的网络协议或操作系统会忽略此字段。默认情况下,TCP 启用保持活动状态。
见 https://golang。 org/pkg/net/#Dialer。 KeepAlive
设置KeepAlive
为时间。持续时间。
拨号器. 超时
此设置表示拨号等待创建连接的最长时间。
默认值为 30 秒。
见 https://golang。 org/pkg/net/#Dialer .Timeout
设置Timeout
为时间。持续时间。
传输
BuildableHTTPClient
提供了构建器机制,用于使用修改后的传输
配置代理
如果您无法直接连接到互联网,则可以使用 Go 支持的环境变量 (HTTP_PROXY
/HTTPS_PROXY
) 或创建自定义 HTTP 客户端来配置代理。以下示例将客户端配置为PROXY_URL
用作代理端点:
import awshttp "github.com/aws/aws-sdk-go-v2/aws/transport/http" import "net/http" // ... httpClient := awshttp.NewBuildableClient().WithTransportOptions(func(tr *http.Transport) { proxyURL, err := url.Parse("PROXY_URL") if err != nil { log.Fatal(err) } tr.Proxy = http.ProxyURL(proxyURL) })
其他设置
以下是一些其他Transport
设置,可以对其进行修改以调整 HTTP 客户端。此处未描述的任何其他设置都可以在传输
import awshttp "github.com/aws/aws-sdk-go-v2/aws/transport/http" import "net/http" // ... httpClient := awshttp.NewBuildableClient().WithTransportOptions(func(tr *http.Transport) { tr.ExpectContinueTimeout = 0 tr.MaxIdleConns = 10 })
运输。 ExpectContinueTimeout
如果请求有 “Expect:100-continue” 标头,则此设置表示在完全写入请求标头后等待服务器第一个响应标头的最长时间,此时间不包括发送请求标头的时间。超时结束后,HTTP 客户端会发送其有效负载。
默认为 1 秒。
设置为 0 表示没有超时,无需等待即可发送请求有效负载。一个用例是,当代理或第三方服务遇到问题时,这些服务的会话类似于在稍后显示的函数中使用 Amazon S3。
见 https://golang。 org/pkg/net/http/#Transport。 ExpectContinueTimeout
设置ExpectContinue
为时间。持续时间。
运输。 IdleConnTimeout
此设置表示在 HTTP 请求之间保持空闲网络连接的最长时间。
设置为 0 表示没有限制。
见 https://golang。 org/pkg/net/http/#Transport。 IdleConnTimeout
设置IdleConnTimeout
为时间。持续时间。
运输。 MaxIdleConns
此设置表示所有主机上空闲(保持活动状态)连接的最大数量。增加此值的一个用例是,当您在短时间内看到来自相同客户端的许多连接时
0 表示没有限制。
见 https://golang。 org/pkg/net/http/#Transport。 MaxIdleConns
设置MaxIdleConns
为 int。
运输。 MaxIdleConnsPerHost
此设置表示每台主机要保留的最大空闲(保持活动状态)连接数。增加此值的一个用例是,当您在短时间内看到来自相同客户端的许多连接时
默认为每台主机有两个空闲连接。
设置为 0 即可使用 DefaultMaxIdleConnsPerHost (2)。
见 https://golang。 org/pkg/net/http/#Transport。 MaxIdleConnsPerHost
设置MaxIdleConnsPerHost
为 int。
运输。 ResponseHeaderTimeout
此设置表示等待客户端读取响应标头的最长时间。
如果客户端无法在这段时间内读取响应的标头,则请求会因超时错误而失败。
使用长时间运行的 Lambda 函数时请谨慎设置此值,因为在 Lambda 函数完成或超时之前,该操作不会返回任何响应标头。但是,您仍然可以在** InvokeAsync ** API 操作中使用此选项。
默认为没有超时;永远等待。
见 https://golang。 org/pkg/net/http/#Transport。 ResponseHeaderTimeout
设置ResponseHeaderTimeout
为时间。持续时间。
运输。 TLSHandshake超时
此设置表示等待 TLS 握手完成的最长时间。
默认为 10 秒。
零表示没有超时。
见 https://golang。 org/pkg/net/http/#Transport。 TLSHandshake超时
设置TLSHandshakeTimeout
为时间。持续时间。