Rumah  >  Artikel  >  pembangunan bahagian belakang  >  golang http permintaan tamat masa

golang http permintaan tamat masa

WBOY
WBOYasal
2023-05-13 10:37:072293semak imbas

Apabila menggunakan golang untuk membangunkan perkhidmatan http, anda mungkin menghadapi masalah tamat masa permintaan. Masalah seperti ini boleh menjejaskan kestabilan dan kebolehpercayaan perkhidmatan, jadi penyelesaian perlu dicari. Artikel ini akan memperkenalkan masalah tamat masa permintaan http golang dan penyelesaiannya.

  1. Perihalan Masalah

Dalam perkhidmatan http, permintaan tamat masa ialah masalah biasa. Sebagai contoh, apabila pelanggan menghantar permintaan, jika pelayan tidak bertindak balas dalam masa yang ditentukan, atau ralat berlaku semasa respons, permintaan akan tamat masa.

Dalam golang, masalah ini boleh diselesaikan dengan menetapkan atribut Tamat Masa dalam Klien atau atribut Tamat Masa dalam http.Transport.

  1. Tetapkan Tamat Masa Pelanggan

http.Pelanggan di golang menyediakan sifat Tamat Masa untuk menetapkan tamat masa permintaan. Secara lalai, sifat Tamat Masa ditetapkan kepada sifar, menunjukkan tiada had tamat masa. Apabila atribut Tamat masa ditetapkan kepada nilai bukan sifar, pelayan akan menunggu respons dalam masa yang ditentukan.

Sebagai contoh, kod berikut menetapkan had tamat masa selama 2 saat:

client := &http.Client{
    Timeout: time.Second * 2,
}

Apabila permintaan tamat, ralat tamat masa (net/http: request canceled (Client.Timeout exceeded while awaiting headers)) dikembalikan. Ralat boleh dibuang atau dikendalikan dengan sewajarnya mengikut keperluan sebenar.

  1. Tetapkan http.Tamat Masa Pengangkutan

Selain menetapkan sifat Tamat Masa http.Client, anda juga boleh mengawal tamat masa permintaan dengan menetapkan sifat http.Transport . Khususnya, anda boleh menetapkan sifat seperti DialTimeout, TLSHandshakeTimeout, ResponseHeaderTimeout dan ExpectContinueTimeout.

Sebagai contoh, kod berikut menetapkan DialTimeout 2 saat:

transport := &http.Transport{
    DialContext: (&net.Dialer{
        Timeout:   2 * time.Second,
        KeepAlive: 30 * time.Second,
    }).DialContext,
    MaxIdleConns:        100,
    IdleConnTimeout:     90 * time.Second,
    TLSHandshakeTimeout: 2 * time.Second,
}
client := &http.Client{
    Timeout:   time.Second * 2,
    Transport: transport,
}

Apabila tamat masa berlaku, ralat tamat masa (dial tcp: i/o timeout) dikembalikan. Ralat boleh dibuang atau dikendalikan dengan sewajarnya mengikut keperluan sebenar.

  1. Ringkasan

Di golang, menetapkan tamat masa permintaan merupakan langkah penting untuk memastikan kestabilan dan kebolehpercayaan perkhidmatan. Kawalan tamat masa permintaan boleh dicapai dengan menetapkan sifat Tamat Masa http.Client atau harta http.Transport. Dalam pembangunan sebenar, adalah perlu untuk menetapkan tamat masa yang sesuai berdasarkan keperluan untuk memastikan operasi normal perkhidmatan.

Atas ialah kandungan terperinci golang http permintaan tamat masa. 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