Rumah > Java > javaTutorial > Bagaimanakah Saya Boleh Mengesan Penutupan Sambungan WebSocket Dengan Amanah Menggunakan API Soket Java?

Bagaimanakah Saya Boleh Mengesan Penutupan Sambungan WebSocket Dengan Amanah Menggunakan API Soket Java?

Barbara Streisand
Lepaskan: 2024-12-18 17:43:14
asal
703 orang telah melayarinya

How Can I Reliably Detect WebSocket Connection Closures Using Java's Socket API?

Java Socket API: Mengesan Penutupan WebSocket

Dalam Java's Socket API, menentukan sama ada sambungan telah ditutup boleh menjadi mencabar. Kaedah isConnected() mengembalikan benar walaupun untuk soket terputus dari jauh, manakala isClosed() kekal palsu walaupun penutupan jauh.

Pendekatan Konvensional

Ramai pembangun menggunakan cara menulis sampah secara berterusan mesej kepada aliran output dan menyemak pengecualian untuk mengesan penutupan. Walau bagaimanapun, kaedah ini tidak cekap dan mencemarkan rangkaian.

Penyelesaian Alternatif

Malangnya, tiada API yang secara eksplisit melaporkan keadaan sambungan. Sebaliknya, pendekatan berikut boleh digunakan untuk membuat kesimpulan sama ada soket telah ditutup:

  1. Operasi Baca/Tulis: Jika rakan sebaya telah menutup sambungan dengan anggun:

    • read() returns -1
    • readLine() returns null
    • Kaedah readXXX() lain membuang EOFException
    • Menulis akhirnya menghasilkan IOException dengan mesej "set semula sambungan oleh rakan sebaya"
  2. Putus Sambungan: Jika sambungan terputus secara tiba-tiba:

    • Tulisan akan menghasilkan IOException seperti yang diterangkan di atas
  3. Baca Tamat Masa: Jika rakan sebaya masih disambungkan tetapi tidak aktif:

    • Gunakan tamat masa baca untuk mengesan kekurangan komunikasi
  4. Pengurusan Saluran: Bertentangan dengan kepercayaan popular, ClosedChannelException tidak menunjukkan sambungan tertutup, sebaliknya saluran tertutup selepas penggunaan.
  5. Select Key Validity: Dalam Java 7 pada Windows XP, kunci terpilih yang menjadi tidak sah walaupun bukan sifar nilai select() mungkin menunjukkan tetapan semula sambungan yang dimulakan oleh rakan sebaya.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengesan Penutupan Sambungan WebSocket Dengan Amanah Menggunakan API Soket Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan