Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menggunakan http.Transport untuk mengurus dan mengawal sambungan panjang HTTP dalam Go?

Bagaimana untuk menggunakan http.Transport untuk mengurus dan mengawal sambungan panjang HTTP dalam Go?

王林
王林asal
2023-07-23 18:12:231555semak imbas

Bagaimana untuk menggunakan http.Transport untuk mengurus dan mengawal sambungan HTTP yang panjang dalam Go?

Apabila membuat permintaan HTTP, mewujudkan sambungan yang panjang boleh meningkatkan prestasi dan kecekapan permintaan dengan ketara. Bahasa Go menyediakan http.Transport untuk mengurus dan mengawal sambungan HTTP yang panjang.

http.Transport ialah modul teras untuk klien HTTP dalam bahasa Go Ia boleh melakukan operasi seperti penggunaan semula sambungan, kawalan masa melahu sambungan dan penutupan sambungan. Berikut akan memperkenalkan cara menggunakan http.Transport untuk mengurus dan mengawal sambungan HTTP yang panjang.

Pertama, kita perlu mencipta objek http.Transport dan menetapkan beberapa parameter untuk mengawal pengurusan sambungan. Sebagai contoh, kita boleh menetapkan bilangan maksimum sambungan melahu, masa melahu maksimum, bilangan maksimum permintaan serentak, dsb. Berikut ialah contoh kod:

package main

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

func main() {
    transport := &http.Transport{
        MaxIdleConns:          10,               // 最大空闲连接数
        IdleConnTimeout:       30 * time.Second, // 最大空闲时间
        MaxIdleConnsPerHost:   2,                // 每个host的最大空闲连接数
        MaxConnsPerHost:       0,                // 每个host的最大连接数,0表示不限制
        MaxResponseHeaderBytes: 1024 * 1024,      // 响应头的最大长度
        TLSHandshakeTimeout:   10 * time.Second, // TLS握手的超时时间
    }
    client := &http.Client{
        Transport: transport,
    }

    resp, err := client.Get("https://www.example.com")
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Body.Close()

    // 处理响应
}

Dalam kod di atas, kami mencipta objek http.Transport dan menetapkan beberapa parameter. Antaranya, MaxIdleConns mewakili bilangan maksimum sambungan melahu, IdleConnTimeout mewakili masa melahu maksimum, MaxIdleConnsPerHost mewakili bilangan maksimum sambungan melahu bagi setiap hos, MaxConnsPerHost mewakili bilangan maksimum sambungan bagi setiap hos, MaxResponseHeaderBytes mewakili panjang maksimum pengepala respons, dan TLSHandshakeTimeout mewakili tamat masa masa jabat tangan TLS.

Kemudian, kami menggunakan objek http.Transport yang dicipta untuk mencipta objek http.Client sebagai pelanggan kami untuk membuat permintaan HTTP. Dalam http.Client ini, kami menetapkan objek http.Transport yang baru kami buat kepada harta Transportnya.

Akhir sekali, kita boleh menggunakan objek http.Client yang dicipta untuk menghantar permintaan HTTP. Apabila menghantar permintaan HTTP, http.Transport asas akan mengendalikan pengurusan dan kawalan sambungan mengikut parameter yang kami tetapkan. Tidak perlu mengurus secara manual penubuhan dan penutupan sambungan, http.Transport akan menggunakan semula sambungan secara automatik dan menutup sambungan terbiar.

Selain parameter yang dinyatakan di atas, http.Transport juga menyediakan beberapa kaedah dan sifat lain untuk kawalan pengurusan sambungan yang lebih terperinci, seperti CancelRequest, CloseIdleConnections dan ForceAttemptHTTP2.

Menggunakan http.Transport untuk mengurus dan mengawal sambungan HTTP yang panjang boleh membantu kami meningkatkan prestasi dan kecekapan permintaan HTTP. Walau bagaimanapun, parameter perlu ditetapkan dengan sewajarnya mengikut situasi sebenar, dan diuji serta dioptimumkan untuk mencapai hasil yang terbaik.

Atas ialah kandungan terperinci Bagaimana untuk menggunakan http.Transport untuk mengurus dan mengawal sambungan panjang HTTP dalam 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