Heim > Java > javaLernprogramm > Wie kann ich WebSocket-Verbindungsabschlüsse mithilfe der Socket-API von Java zuverlässig erkennen?

Wie kann ich WebSocket-Verbindungsabschlüsse mithilfe der Socket-API von Java zuverlässig erkennen?

Barbara Streisand
Freigeben: 2024-12-18 17:43:14
Original
703 Leute haben es durchsucht

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

Java Socket API: Erkennen von WebSocket-Schließungen

In Javas Socket API kann es schwierig sein, festzustellen, ob eine Verbindung geschlossen wurde. Die Methode isConnected() gibt auch für remote getrennte Sockets true zurück, während isClosed() trotz Remote-Schließungen false bleibt.

Konventioneller Ansatz

Viele Entwickler greifen darauf zurück, kontinuierlich Müll zu schreiben Nachrichten an den Ausgabestream senden und auf Ausnahmen prüfen, um Schließungen zu erkennen. Allerdings ist diese Methode ineffizient und belastet das Netzwerk.

Alternative Lösungen

Leider gibt es keine API, die den Verbindungsstatus explizit meldet. Stattdessen können die folgenden Ansätze verwendet werden, um abzuleiten, ob ein Socket geschlossen wurde:

  1. Lese-/Schreibvorgänge: Wenn der Peer die Verbindung ordnungsgemäß geschlossen hat:

    • read() gibt -1 zurück
    • readLine() gibt null zurück
    • Andere readXXX()-Methoden lösen eine EOFException aus
    • Schreibvorgänge führen schließlich zu einer IOException mit der Meldung „Verbindung vom Peer zurückgesetzt“
  2. Verbindungsabbruch: Wenn die Verbindung plötzlich abbricht:

    • Schreibvorgänge führen wie beschrieben zu einer IOException oben
  3. Lese-Timeout:Wenn der Peer noch verbunden, aber inaktiv ist:

    • Verwenden Sie ein Lese-Timeout, um eine zu erkennen Mangel an Kommunikation
  4. Kanal Verwaltung: Entgegen der landläufigen Meinung weist ClosedChannelException nicht auf eine geschlossene Verbindung hin, sondern eher auf einen geschlossenen Kanal nach der Verwendung.
  5. Schlüsselgültigkeit auswählen: In Java 7 unter Windows XP, a Der ausgewählte Schlüssel, der trotz eines select()-Werts ungleich Null ungültig wird, kann auf ein Peer-initiiertes Verbindungs-Reset hinweisen.

Das obige ist der detaillierte Inhalt vonWie kann ich WebSocket-Verbindungsabschlüsse mithilfe der Socket-API von Java zuverlässig erkennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage