Pemantauan putus sambungan pelanggan soket sisi pelayan
Dalam aplikasi yang diedarkan, pengesanan pemutusan sambungan pelanggan tepat pada masanya adalah penting untuk mengekalkan integriti sistem. Walau bagaimanapun, tidak seperti pelanggan yang dapat memberitahu pelayan menggunakan acara atau panggilan balik, pelayan menghadapi cabaran untuk mengenal pasti penamatan klien secara proaktif.
Kaedah pengesanan
Kaedah berikut telah terbukti tidak berkesan untuk mengesan sambungan pelanggan pada soket pelayan:
handler.Available
: Kaedah ini mengembalikan bilangan bait yang boleh dibaca, tetapi ini bukan petunjuk pemutusan sambungan. handler.Send
: Jika pelanggan telah memutuskan sambungan, penghantaran data akan gagal, tetapi ini adalah ujian yang merosakkan dan akan menyebabkan ralat semasa percubaan penyambungan semula. handler.Receive
: Begitu juga, jika pelanggan tidak disambungkan, cubaan menerima data akan menghasilkan pengecualian. Pengundian menggunakan kaedah sambungan
Memandangkan tiada acara khusus untuk pemotongan soket, pengundian berkala disyorkan. Untuk memudahkan proses ini, anda boleh membuat kaedah sambungan:
<code class="language-csharp">static class SocketExtensions { public static bool IsConnected(this Socket socket) { try { return !(socket.Poll(1, SelectMode.SelectRead) && socket.Available == 0); } catch (SocketException) { return false; } } }</code>
Kaedah ini menggunakan kaedah Poll
untuk menyemak ketersediaan data. Jika tinjauan pendapat berjaya tetapi Available
mengembalikan 0, ini menunjukkan bahawa sambungan mungkin telah diputuskan, yang boleh disahkan dengan menangkap SocketException
semasa operasi penghantaran.
Atas ialah kandungan terperinci Bagaimanakah Pelayan Boleh Mengesan Pemutusan Sambungan Pelanggan pada Soket?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!