Sesuaikan Klien HTTP - AWS SDK untuk Go v2

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Sesuaikan Klien HTTP

AWS SDK untuk Go Menggunakan klien HTTP default dengan nilai konfigurasi default. Meskipun Anda dapat mengubah beberapa nilai konfigurasi ini, klien HTTP default dan transport tidak cukup dikonfigurasi untuk pelanggan yang menggunakan AWS SDK untuk Go dalam lingkungan dengan throughput tinggi dan persyaratan latensi rendah. Untuk informasi lebih lanjut, silakan lihat rekomendasi konfigurasi Pertanyaan yang Sering Diajukan as bervariasi berdasarkan beban kerja tertentu. Bagian ini menjelaskan cara mengkonfigurasi klien HTTP kustom, dan menggunakan klien tersebut untuk membuat AWS SDK untuk Go panggilan.

Untuk membantu Anda dalam membuat klien HTTP kustom, bagian ini menjelaskan cara NewBuildableClientuntuk mengkonfigurasi pengaturan kustom, dan menggunakan klien itu dengan klien AWS SDK untuk Go layanan.

Mari kita definisikan apa yang ingin kita sesuaikan.

Mengganti Selama Pemuatan Konfigurasi

Klien HTTP kustom dapat diberikan saat memanggil LoadDefaultConfigdengan membungkus klien menggunakan With HTTPClient dan meneruskan nilai yang dihasilkan keLoadDefaultConfig. Misalnya, untuk lulus customClient sebagai klien kami:

cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithHTTPClient(customClient))

Waktu habis

BuildableHTTPClientDapat dikonfigurasi dengan batas waktu tunggu permintaan. Batas waktu ini mencakup waktu untuk terhubung, memproses pengalihan apa pun, dan membaca badan respons lengkap. Misalnya, untuk memodifikasi batas waktu klien:

import "github.com/aws/aws-sdk-go-v2/aws/transport/http" // ... httpClient := http.NewBuildableClient().WithTimeout(time.Second*5)

Dialer

BuildableHTTPClientIni menyediakan mekanisme pembangun untuk membangun klien dengan opsi Dialer yang dimodifikasi. Contoh berikut menunjukkan cara mengkonfigurasi Dialer pengaturan klien.

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 })

Pengaturan

Dialer. KeepAlive

Pengaturan ini mewakili periode keep-alive untuk koneksi jaringan aktif.

Setel ke nilai negatif untuk menonaktifkan keep-alives.

Setel ke 0 untuk mengaktifkan keep-alives jika didukung oleh protokol dan sistem operasi.

Protokol jaringan atau sistem operasi yang tidak mendukung keep-alives mengabaikan bidang ini. Secara default, TCP memungkinkan tetap hidup.

Lihat https://golang. org/pkg/net/#Dialer. KeepAlive

Tetapkan KeepAlive sebagai time.Duration.

Dialer.Timeout

Pengaturan ini mewakili jumlah maksimum waktu dial menunggu koneksi dibuat.

Defaultnya adalah 30 detik.

Lihat https://golang. org/pkg/net/#Dialer .Timeout

Tetapkan Timeout sebagai time.Duration.

Transportasi

BuildableHTTPClientIni menyediakan mekanisme pembangun untuk membangun klien dengan opsi Transportasi yang dimodifikasi.

Mengkonfigurasi Proxy

Jika Anda tidak dapat langsung terhubung ke internet, Anda dapat menggunakan variabel lingkungan yang didukung GO (HTTP_PROXY/HTTPS_PROXY) atau membuat klien HTTP khusus untuk mengonfigurasi proxy Anda. Contoh berikut mengonfigurasi klien untuk digunakan PROXY_URL sebagai titik akhir proxy:

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) })

Pengaturan Lainnya

Di bawah ini adalah beberapa Transport pengaturan lain yang dapat dimodifikasi untuk menyetel klien HTTP. Pengaturan tambahan apa pun yang tidak dijelaskan di sini dapat ditemukan di dokumentasi tipe Transport. Pengaturan ini dapat diterapkan seperti yang ditunjukkan pada contoh berikut:

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 })

Transportasi. ExpectContinueTimeout

Jika permintaan memiliki header “Expect: 100-continue”, pengaturan ini mewakili jumlah waktu maksimum untuk menunggu header respons pertama server setelah sepenuhnya menulis header permintaan, Kali ini tidak termasuk waktu untuk mengirim header permintaan. Klien HTTP mengirimkan payloadnya setelah batas waktu ini habis.

Default 1 detik.

Setel ke 0 tanpa batas waktu dan kirim payload permintaan tanpa menunggu. Salah satu kasus penggunaan adalah ketika Anda mengalami masalah dengan proxy atau layanan pihak ketiga yang mengambil sesi yang mirip dengan penggunaan Amazon S3 dalam fungsi yang ditampilkan nanti.

Lihat https://golang. org/pkg/net/http/#Transport. ExpectContinueTimeout

Tetapkan ExpectContinue sebagai time.Duration.

Transportasi. IdleConnTimeout

Pengaturan ini mewakili jumlah maksimum waktu untuk menjaga koneksi jaringan idle tetap hidup antara permintaan HTTP.

Setel ke 0 tanpa batas.

Lihat https://golang. org/pkg/net/http/#Transport. IdleConnTimeout

Tetapkan IdleConnTimeout sebagai time.Duration.

Transportasi. MaxIdleConns

Pengaturan ini mewakili jumlah maksimum koneksi idle (keep-alive) di semua host. Salah satu kasus penggunaan untuk meningkatkan nilai ini adalah ketika Anda melihat banyak koneksi dalam waktu singkat dari klien yang sama

0 berarti tidak ada batas.

Lihat https://golang. org/pkg/net/http/#Transport. MaxIdleConns

Tetapkan MaxIdleConns sebagai int.

Transportasi. MaxIdleConnsPerHost

Pengaturan ini mewakili jumlah maksimum koneksi idle (keep-alive) untuk disimpan per host. Salah satu kasus penggunaan untuk meningkatkan nilai ini adalah ketika Anda melihat banyak koneksi dalam waktu singkat dari klien yang sama

Default adalah dua koneksi idle per host.

Setel ke 0 untuk menggunakan DefaultMaxIdleConnsPerHost (2).

Lihat https://golang. org/pkg/net/http/#Transport. MaxIdleConnsPerHost

Tetapkan MaxIdleConnsPerHost sebagai int.

Transportasi. ResponseHeaderTimeout

Pengaturan ini mewakili jumlah waktu maksimum untuk menunggu klien membaca header respons.

Jika klien tidak dapat membaca header respons dalam durasi ini, permintaan gagal dengan kesalahan batas waktu.

Hati-hati menyetel nilai ini saat menggunakan fungsi Lambda yang berjalan lama, karena operasi tidak mengembalikan header respons apa pun hingga fungsi Lambda selesai atau habis waktu. Namun, Anda masih dapat menggunakan opsi ini dengan operasi API InvokeAsync ** **.

Default adalah tidak ada batas waktu; tunggu selamanya.

Lihat https://golang. org/pkg/net/http/#Transport. ResponseHeaderTimeout

Tetapkan ResponseHeaderTimeout sebagai time.Duration.

Transportasi. TLSHandshakeBatas waktu

Pengaturan ini mewakili jumlah waktu maksimum menunggu jabat tangan TLS selesai.

Default-nya 10 detik.

Nol berarti tidak ada batas waktu.

Lihat https://golang. org/pkg/net/http/#Transport. TLSHandshakeBatas waktu

Tetapkan TLSHandshakeTimeout sebagai time.Duration.