Teguh Mengesan Pemutusan Soket Pelanggan pada Pelayan
Mengekalkan kestabilan pelayan dan pengalaman pengguna yang positif bergantung pada pengesanan pemutusan sambungan pelanggan dengan cekap. Walaupun pelanggan boleh menggunakan pelbagai kaedah untuk mengesan pemutusan sambungan pelayan, artikel ini memfokuskan pada cara pelayan boleh mengenal pasti dengan cepat dan boleh dipercayai apabila pelanggan telah memutuskan sambungan daripada soketnya. Kami akan meneroka batasan pendekatan tradisional dan membentangkan penyelesaian yang mantap menggunakan tinjauan pendapat.
Senario: Pelayan telah menerima sambungan klien melalui objek Soket (dirujuk sebagai handler
). Cabarannya ialah untuk memantau handler
ini untuk terputus sambungan.
Mengapa Kaedah Tradisional Gagal
Hanya menyemak sifat seperti handler.Available
, handler.Send
atau handler.Receive
tidak mencukupi untuk mengesan pemutusan sambungan pelanggan dari perspektif pelayan. Kaedah ini tidak direka bentuk untuk memberi isyarat terus pemutusan sambungan dalam konteks pemantauan pelayan ini.
Penyelesaian Undian: IsConnected()
Kaedah Sambungan
Memandangkan acara putus sambungan soket terbina dalam tidak hadir, kami menggunakan mekanisme pengundian. Kaedah sambungan IsConnected()
menggunakan kaedah Poll()
untuk menyemak kesambungan soket.
Kaedah ini memanggil Poll()
dengan tamat masa yang singkat (1 milisaat) dan SelectMode.SelectRead
. Panggilan Poll()
yang berjaya dengan handler.Available
bersamaan dengan 0 menunjukkan sambungan aktif. Sebarang hasil carian lain mencadangkan pemutusan sambungan.
Pelaksanaan dan Penyepaduan Kod
Untuk menyepadukan fungsi ini, kami mengubah suai kaedah AcceptCallback
:
<code class="language-csharp">using SocketExtensions; public static void AcceptCallback(IAsyncResult ar) { // Accept the incoming connection Socket listener = (Socket)ar.AsyncState; handler = listener.EndAccept(ar); // Begin polling for disconnections Task.Run(() => { while (handler.IsConnected()) { // Process data while the client is connected } // Client disconnected Console.WriteLine("Client disconnected"); // Handle disconnection appropriately (e.g., cleanup resources) }); }</code>
Kesimpulan: Pengendalian Pemutusan Sambungan yang Boleh Dipercayai
Kaedah sambungan IsConnected()
menyediakan cara yang boleh dipercayai untuk pelayan mengesan pemotongan soket pelanggan. Pendekatan proaktif ini membolehkan respons segera kepada gangguan sambungan, memastikan kestabilan pelayan dan pengalaman pengguna yang lancar. Ingatlah untuk mengendalikan peristiwa pemutusan sambungan dengan sewajarnya, seperti melepaskan sumber dan membersihkan soket.
Atas ialah kandungan terperinci Bagaimanakah Pelayan Boleh Mengesan Pemutusan Soket Pelanggan dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!