Mengesan TCP Client Disconnect: Panduan Komprehensif
Dalam bidang pembangunan pelayan TCP, mengesan pemutusan sambungan pelanggan adalah penting untuk mengekalkan responsif dan aplikasi tahan ralat. Walau bagaimanapun, pemergian pelanggan boleh berlaku secara anggun atau tiba-tiba, mencabar keupayaan pelayan untuk mengendalikan acara ini dengan berkesan.
Pemutus Sambungan Teratur
Apabila pelanggan memutuskan sambungan dengan teratur, ia biasanya menghantar arahan "tutup" kepada pelayan. Dalam kes sedemikian, pelayan boleh mengesan pemutusan sambungan dengan menerima nilai pulangan sifar daripada operasi read()/recv()/recvXXX().
Pemutus Sambungan Mengejut
Walau bagaimanapun, dalam senario di mana pelanggan memutuskan sambungan secara tiba-tiba atau kehilangan sambungan rangkaian, pelayan mesti menggunakan mekanisme yang berbeza untuk mengesan terputus sambungan. Satu kaedah yang boleh dipercayai adalah dengan cuba menulis ke soket. Selepas penulisan gagal berulang, TCP akhirnya akan mengenali sambungan yang terputus dan menyebabkan write()/send()/sendXXX() kembali -1, disertai dengan kod ralat seperti ECONNRESET atau 'sambungan tamat masa'.
Tamat Masa Baca
Pendekatan lain ialah menetapkan tamat masa baca yang munasabah untuk sambungan pelanggan. Jika tempoh tamat masa berlalu tanpa menerima sebarang data, pelayan boleh menganggap pelanggan telah memutuskan sambungan dan memutuskan sambungan.
FIONREAD: Janji Palsu
Walaupun beberapa sumber mencadangkan penggunaan ioctl() dan FIONREAD untuk mengesan pemutusan sambungan pelanggan, kaedah ini tidak boleh dipercayai. FIONREAD hanya menunjukkan bilangan bait yang terdapat dalam penimbal terima soket, yang tidak berkait secara langsung dengan pemutusan sambungan pelanggan.
Atas ialah kandungan terperinci Bagaimanakah Pelayan TCP Boleh Mengesan Pemutusan Sambungan Pelanggan dengan Amanah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!