Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Beritahu anda cara menetapkan tamat masa rangkaian di Golang

Beritahu anda cara menetapkan tamat masa rangkaian di Golang

PHPz
PHPzasal
2023-03-30 09:11:371686semak imbas

Apabila melakukan pengaturcaraan rangkaian, anda sering menghadapi keperluan untuk menetapkan tamat masa untuk mengelakkan tamat masa sambungan rangkaian yang mungkin menyebabkan ketinggalan. Menetapkan tamat masa rangkaian di Golang adalah sangat mudah Artikel ini akan membawa anda memahami kaedah tetapan tamat masa rangkaian di Golang.

1. Tamat masa rangkaian di Golang

Apabila berkomunikasi di rangkaian, kedua-dua pelanggan dan pelayan perlu menetapkan tamat masa tertentu untuk memastikan keteguhan program. Di Golang, tamat masa rangkaian boleh ditetapkan dalam dua cara:

  1. Tamat masa konteks

Pakej konteks ialah pakej yang biasa digunakan, yang boleh digunakan untuk mengawal beberapa pembatalan Goroutine, tamat masa, tarikh akhir, dsb. Apabila menggunakan Konteks dalam pengaturcaraan rangkaian, kami boleh menetapkan tempoh tamat masa melalui kaedah WithDeadline atau WithTimeout yang mendasari, seperti yang ditunjukkan di bawah:

ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
defer cancel()

resp, err := http.Get("https://www.baidu.com")
if err != nil {
    log.Fatalln(err)
}
defer resp.Body.Close()

Dalam kod di atas, kami menetapkan tempoh tamat masa selama 5 saat melalui WithTimeout kaedah. Apabila tamat masa mencapai, kami membatalkan Konteks ini melalui defer cancel(), supaya kod boleh keluar dalam masa.

  1. net.Dail tamat

Di Golang, kita boleh membuat sambungan tcp atau udp melalui net.Fungsi dail. Fungsi ini mempunyai berbilang borang terlebih beban, termasuk satu yang menetapkan tamat masa. Contohnya, untuk menetapkan sambungan tcp dengan tamat masa 5 saat, kita boleh menulis seperti ini:

conn, err := net.DialTimeout("tcp", "www.baidu.com:80", time.Second*5)
if err != nil {
    log.Fatalln(err)
}

Di sini kita menggunakan fungsi net.DialTimeout untuk mencipta sambungan tcp. Jika sambungan berjaya diwujudkan dalam masa 5 saat, objek net.Conn dikembalikan. Jika tidak, fungsi akan mengembalikan ralat, dan kami perlu keluar dari program dengan segera selepas ralat ini dikembalikan.

2. Bagaimana untuk memilih kaedah tamat masa

Jadi apabila melakukan pengaturcaraan rangkaian, kaedah manakah yang harus anda pilih untuk tetapan tamat masa? Ini bergantung pada konteks perniagaan tertentu.

Secara umum, menggunakan tamat masa Konteks ialah cara yang lebih disyorkan. Ini kerana menggunakan tamat masa Konteks boleh disepadukan dengan lebih mudah ke bahagian lain kod, seperti kawalan goroutine. Selain itu, melalui fungsi batal, kita boleh memahami status berjalan Konteks dengan lebih intuitif, supaya dapat mengendalikan ralat dengan lebih baik.

Walau bagaimanapun, dalam sesetengah senario, kaedah tamat masa net.Dail adalah lebih sesuai. Contohnya, apabila membuat permintaan http, kita boleh menggunakan struktur Pengangkutan di bawah pakej net/http untuk menggunakan semula kumpulan sambungan Pada masa ini, menggunakan kaedah net.Dial boleh mengawal status sambungan dengan lebih baik.

Ringkasnya, dalam pembangunan sebenar, kita perlu memutuskan kaedah yang hendak digunakan untuk tetapan tamat masa berdasarkan keperluan perniagaan tertentu.

3. Ringkasan

Melalui penjelasan artikel ini, saya percaya pembaca telah menguasai kaedah menetapkan tamat masa rangkaian di Golang. Apabila melakukan pengaturcaraan rangkaian, kita mesti sentiasa berwaspada untuk mengelakkan program terhenti akibat tamat masa sambungan rangkaian. Oleh itu, menetapkan tamat masa adalah sangat perlu, dan pembaca mesti menerapkannya.

Atas ialah kandungan terperinci Beritahu anda cara menetapkan tamat masa rangkaian di Golang. 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