Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mengesan Sambungan TCP Tertutup dengan Amanah dalam Pakej `net` Go?
Memantau Status Sambungan TCP dalam Pakej Bersih
Tugas biasa dalam pelaksanaan pelayan TCP ialah menentukan apabila sambungan pelanggan telah ditutup. Soalan ini meneroka kaedah yang boleh dipercayai untuk mengesan penutupan sambungan dalam pakej Go net.
Menyemak Sambungan Tertutup
Pendekatan yang dicadangkan ialah mencuba kedua-dua operasi baca dan tulis dan semak sama ada mengembalikan ralat sifar. Jika kedua-dua operasi berjaya, sambungan diandaikan terbuka. Walau bagaimanapun, kaedah ini mempunyai had.
Pengesanan Boleh Dipercayai Menggunakan Tamat Masa
Penyelesaian yang lebih dipercayai melibatkan penetapan tarikh akhir bacaan dan percubaan bacaan satu bait. Jika bacaan selesai dengan ralat io.EOF, sambungan dianggap ditutup. Untuk mengelakkan positif palsu disebabkan oleh pelanggan yang perlahan, tarikh akhir bacaan bukan sifar boleh ditetapkan.
one := make([]byte, 1) c.SetReadDeadline(time.Now()) if _, err := c.Read(one); err == io.EOF { // Connection closed }
Pengesanan Tamat Masa
Jika tamat masa bacaan tamat tempoh, yang disediakan ralat akan melaksanakan antara muka net.Error, dan kaedah Timeout() ralat boleh digunakan untuk mengesahkan sebab.
if neterr, ok := err.(net.Error); ok && neterr.Timeout() { // Connection timed out }
Pertimbangan Go 1.7
Dalam Go 1.7 , bacaan sifar-bait kembali serta-merta tanpa ralat. Oleh itu, memastikan sekurang-kurangnya satu bait dibaca adalah penting untuk mengelakkan positif palsu.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengesan Sambungan TCP Tertutup dengan Amanah dalam Pakej `net` Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!