首頁 > Java > java教程 > 如何使用 Java 的 Socket API 可靠地偵測 WebSocket 連線關閉?

如何使用 Java 的 Socket API 可靠地偵測 WebSocket 連線關閉?

Barbara Streisand
發布: 2024-12-18 17:43:14
原創
703 人瀏覽過

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

Java Socket API:偵測 WebSocket 關閉

在 Java 的 Socket API 中,確定連線是否已關閉可能具有挑戰性。即使對於遠端斷開的套接字,isConnected() 方法也會傳回 true,而儘管遠端關閉,isClosed() 仍然為 false。

傳統方法

許多開發人員訴諸於不斷編寫垃圾訊息發送到輸出流並檢查異常以檢測關閉。然而,這種方法效率低下,並且污染網路。

替代解決方案

不幸的是,沒有明確報告連接狀態的 API。相反,可以使用以下方法推斷套接字是否已關閉:

  1. 讀/寫操作:如果對等方已正常關閉連接:

    • read() 回傳-1
    • readLine()回傳null
    • 其他readXXX() 方法拋出EOFException
    • 寫入最終會導致IOException 並顯示訊息「連接已被對等方重置」
  2. 連線中斷:如果連線中斷突然:

    • 寫入會導致如上所述的IOException
  3. 讀取逾時:如果對等方仍處於連線狀態但不活動:

    • 使用讀取逾時來檢測缺少通信
  4. 通道管理:與流行的看法相反,ClosedChannelException並不表示關閉連接,而是表示使用後關閉通道。
  5. 選擇金鑰有效性:在Windows XP 上的Java 7 中,儘管選擇了金鑰,但所選金鑰仍然無效非零select() 值可能表示對等發起的連線重置。

以上是如何使用 Java 的 Socket API 可靠地偵測 WebSocket 連線關閉?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板