Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Konfigurasi tamat masa sambungan dan amalan terbaik untuk http.Transport dalam bahasa Go

Konfigurasi tamat masa sambungan dan amalan terbaik untuk http.Transport dalam bahasa Go

WBOY
WBOYasal
2023-07-21 13:25:16924semak imbas

Konfigurasi tamat masa sambungan dan amalan terbaik http.Transport dalam bahasa Go

Dalam bahasa Go, menggunakan http.Transport untuk membuat permintaan HTTP adalah operasi yang sangat biasa. Dalam aplikasi sebenar, kita sering menghadapi situasi di mana kita perlu mengkonfigurasi tamat masa sambungan. Artikel ini akan memperkenalkan cara menggunakan http.Transport untuk konfigurasi tamat masa sambungan dan memberikan beberapa amalan terbaik.

Pertama sekali, kita perlu memahami asas penggunaan http.Transport. http.Transport ialah perpustakaan dalam Go yang mengurus bahagian pengangkutan peringkat rendah HTTP dan HTTPS. Ia menyediakan beberapa pilihan konfigurasi seperti tamat masa sambungan, tamat masa baca, tamat masa tulis, dsb.

Sebelum menggunakan http.Transport, kita perlu mencipta objek http.Client dahulu. http.Client menyediakan beberapa kaedah lanjutan, seperti Get, Post, dsb., untuk memudahkan operasi permintaan HTTP. Apabila mencipta objek http.Client, kami boleh menentukan objek http.Transport untuk mengkonfigurasinya.

Berikut ialah kod contoh mudah:

package main

import (
    "fmt"
    "net/http"
    "time"
)

func main() {
    transport := &http.Transport{
        // 设置连接超时时间为5秒
        DialTimeout: 5 * time.Second,
    }

    client := &http.Client{
        Transport: transport,
    }

    resp, err := client.Get("https://www.example.com")
    if err != nil {
        fmt.Println("HTTP请求失败:", err)
        return
    }

    defer resp.Body.Close()

    fmt.Println("HTTP响应码:", resp.StatusCode)
}

Dalam contoh di atas, kami mencipta objek http.Transport dan menetapkan tamat masa sambungan kepada 5 saat. Kemudian kami mencipta objek http.Client dan menetapkan objek http.Transport yang dibuat sebelum ini kepada harta Transportnya. Akhir sekali, kami memulakan permintaan GET menggunakan kaedah client.Get. Jika permintaan itu berjaya, kod respons HTTP akan dikeluarkan.

Selain tamat masa sambungan, tamat masa baca dan tamat tulis juga boleh dikonfigurasikan. Sebagai contoh, kita boleh menetapkan tamat masa baca yang dipertimbangkan kepada 10 saat dan tamat masa tulis kepada 5 saat. Kod sampel adalah seperti berikut:

transport := &http.Transport{
    DialTimeout: 5 * time.Second,
    MaxIdleConnsPerHost: 10,
    ResponseHeaderTimeout: 10 * time.Second,
    IdleConnTimeout: 30 * time.Second,
}

client := &http.Client{
    Transport: transport,
    Timeout: 10 * time.Second,
}

resp, err := client.Get("https://www.example.com")

Dalam contoh di atas, selain daripada menetapkan tamat masa sambungan, kami juga menetapkan bilangan maksimum sambungan melahu, tamat masa pengepala respons, tamat masa sambungan melahu dan jumlah tamat masa. Konfigurasi ini boleh dilaraskan mengikut keperluan sebenar.

Akhir sekali, kita perlu ambil perhatian bahawa http.Transport adalah selamat untuk benang dan boleh dikongsi oleh berbilang goroutine. Tetapi http.Client tidak selamat untuk thread, dan setiap goroutine harus mempunyai contoh http.Client sendiri.

Untuk meringkaskan, dengan mengkonfigurasi tamat masa sambungan http.Transport, kami boleh mengoptimumkan prestasi dan kebolehpercayaan permintaan HTTP. Mengkonfigurasi tamat masa sambungan dengan betul boleh mengelakkan kesesakan permintaan yang disebabkan oleh kelewatan rangkaian. Dalam amalan, kami juga boleh mengkonfigurasi tamat masa baca dan menulis tamat masa mengikut situasi tertentu. Saya harap artikel ini dapat membantu anda menggunakan http.Transport dengan lebih baik untuk konfigurasi tamat masa sambungan dan amalan terbaik.

Atas ialah kandungan terperinci Konfigurasi tamat masa sambungan dan amalan terbaik untuk http.Transport dalam bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn