Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah http.Transport berfungsi dalam bahasa Go dan cara menggunakannya dengan betul?

Bagaimanakah http.Transport berfungsi dalam bahasa Go dan cara menggunakannya dengan betul?

王林
王林asal
2023-07-21 15:18:322156semak imbas

Bagaimanakah http.Transport berfungsi dalam bahasa Go dan cara menggunakannya dengan betul?

Bahasa Go ialah bahasa pengaturcaraan yang ringkas dan cekap Pustaka standardnya mengandungi pakej rangkaian yang berkuasa dan fleksibel yang boleh melaksanakan operasi permintaan dan tindak balas HTTP dengan mudah. Dalam pakej rangkaian bahasa Go, http.Transport ialah komponen penting, yang boleh menguruskan sambungan rangkaian, tetapan tamat masa, mekanisme cuba semula, dsb. antara klien HTTP dan pelayan. Dalam artikel ini, kami akan meneroka cara http.Transport berfungsi dan menerangkan cara menggunakannya dengan betul.

Cara http.Transport berfungsi:

Dalam bahasa Go, http.Transport ialah pengurus sambungan (Pengurus Sambungan), yang bertanggungjawab untuk mencipta dan mengurus sambungan rangkaian dengan pelayan HTTP. http.Transport secara dalaman mengekalkan satu set sambungan melahu (sambungan Keep-Alive), yang boleh menggunakan semula sambungan TCP sedia ada, menjimatkan kos mewujudkan dan menutup sambungan.

Di dalam http.Transport, sambungan rangkaian diwujudkan ke pelayan melalui fungsi Dail. Fungsi Dail dilaksanakan sebelum setiap permintaan. Fungsi Dail ialah hak milik http.Transport dan boleh disesuaikan mengikut keperluan. Jika anda tidak menentukan fungsi Dail, fungsi Dail lalai digunakan, yang secara automatik akan memilih fungsi Dail yang sesuai berdasarkan Skim (protokol) URL apabila diperlukan. Sebagai contoh, fungsi Dial lalai akan memilih fungsi DialTCP atau fungsi DialTLS mengikut Skim URL.

Selepas membuat sambungan, http.Transport akan menggunakan sambungan panjang HTTP (sambungan Keep-Alive) untuk berkomunikasi dengan pelayan. Ini bermakna berbilang permintaan HTTP dan berbilang respons HTTP boleh dihantar pada sambungan TCP yang sama, mengurangkan overhed penubuhan sambungan dan penutupan.

http.Transport juga melaksanakan mekanisme Connection Pooling, yang boleh mengurangkan kependaman rangkaian pada tahap tertentu. Berbilang sambungan TCP terbiar dikekalkan dalam kumpulan sambungan, dan sambungan yang tersedia dipilih daripada kumpulan sambungan setiap kali permintaan dihantar. Selepas permintaan selesai, sambungan akan dimasukkan semula ke dalam kumpulan sambungan untuk digunakan semula.

Nota tentang penggunaan http.Transport yang betul:

Penggunaan http.Transport yang betul boleh meningkatkan prestasi dan kecekapan permintaan HTTP dengan ketara. Berikut ialah beberapa nota mengenai penggunaan http.Transport:

  1. Elakkan membuat terlalu banyak objek http.Transport: Objek http.Transport ialah objek berat dan mencipta serta memusnahkan objek adalah mahal. Oleh itu, anda harus cuba mencipta hanya satu objek http.Transport dalam program anda dan menggunakannya semula.
  2. Konfigurasikan http.Parameter pengangkutan: http.Pengangkutan mempunyai beberapa parameter penting yang boleh dikonfigurasikan, seperti tamat masa, bilangan maksimum sambungan melahu, dsb. Melaraskan parameter ini secara munasabah mengikut keperluan sebenar boleh meningkatkan prestasi dan mengelakkan kebocoran sumber dan masalah lain.

Berikut ialah contoh kod yang menggunakan http.Transport untuk merangkak halaman web:

package main

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

func main() {
    // 创建一个http.Transport对象,并设置一些参数
    tr := &http.Transport{
        MaxIdleConns:        10,               // 最大空闲连接数
        MaxIdleConnsPerHost: 3,                // 每个host的最大空闲连接数
        IdleConnTimeout:     30 * time.Second, // 空闲连接超时时间
    }

    // 创建一个http.Client对象,使用指定的Transport
    client := &http.Client{
        Transport: tr,
    }

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

    // 读取响应内容
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println("读取响应内容失败:", err)
        return
    }

    fmt.Println("响应内容:", string(body))
}

Kod di atas mula-mula mencipta http.Transport object tr, dan menetapkan bilangan maksimum sambungan melahu, bilangan maksimum sambungan melahu untuk setiap hos, dan tamat masa sambungan Melahu dan parameter lain. Kemudian, klien objek http.Client dicipta dan menggunakan tr sebagai Pengangkutannya. Akhir sekali, hantar permintaan HTTP GET melalui fungsi klien. Dapatkan, dapatkan kandungan respons dan keluarkannya.

Ringkasan:

Artikel ini meneroka secara ringkas cara http.Transport berfungsi dalam bahasa Go dan menyediakan kod sampel menggunakan http.Transport. Penggunaan http.Transport yang betul boleh meningkatkan prestasi dan kecekapan permintaan HTTP dengan ketara. Saya berharap pembaca dapat memberikan permainan sepenuhnya kepada kelebihan http.Transport dalam pembangunan sebenar dan memberikan pengguna pengalaman rangkaian yang lebih baik.

Atas ialah kandungan terperinci Bagaimanakah http.Transport berfungsi dalam bahasa Go dan cara menggunakannya dengan betul?. 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