我有一個 .Net/C# 服務器。客戶端通過 websockets 連接到服務器。
我想從服務器檢測客戶端失去互聯網連接的情況。
我在回圈中包含以下代碼,該回圈通過 Web 套接字讀取來自客戶端的資料
Dim WS as Websocket 'Websocket Created somewhere else...
Dim MemoryStream As New MemoryStream()
Dim Result As WebSocketReceiveResult = Nothing
Dim Buffer As ArraySegment(Of Byte) = New ArraySegment(Of Byte)(New Byte(20000) {})
Do
Try
Result = Await WS.ReceiveAsync(Buffer, CancellationToken.None)
Catch Ex As WebSocketException
'Some exception handler
End Try
If WS.State <> WebSocketState.Open Then '<< Break point A
RaiseEvent Disconnected(Me) '<<<<<< Raise websocket disconnected event
End If
MemoryStream.Write(Buffer.ToArray, Buffer.Offset, Result.Count)
If Result.EndOfMessage = True Then Exit Do
Loop
'Do something '<< Break point B
為了測驗代碼,我幾乎在所有地方都放置了斷點,然后我連接了一個客戶端。客戶端連接后,我為他切斷了互聯網連接。
不幸的是,沒有找到斷點來檢測 Websocket 斷開連接事件。
我想知道是否有辦法檢測 websocket 物件何時在 C# 或 .Net 中斷開連接
感謝和問候,
uj5u.com熱心網友回復:
閱讀精美的手冊,在我看來,您會遇到例外,您已經為其撰寫的處理程式,或者回傳的 WebSocketReceiveResult(您的 Result 物件)將具有CloseStatus列舉。如果您真的要拔掉網線,我不會指望立即做出反應;您可能需要等待一段時間。
uj5u.com熱心網友回復:
最后我得到了解釋。
當互聯網連接丟失時,前面的代碼有效。但是,您必須等待 20 分鐘才能從 websocket 獲取例外。檢測斷開連接的用戶需要 20 分鐘的時間。所以我最終每 x 秒使用一次 ping 程序來檢測這種情況。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/314915.html
