在asp.net核心服务器中处理封闭的websocket连接

问题描述 投票:3回答:1

任何人都可以解释我如何从客户端删除websockets意外终止其连接?我的意思是用户以不好的方式关闭应用程序,而不告诉服务器他们想要断开连接?你通常如何处理断开连接。

我尝试了一段侦听消息接收的代码,并且有一个带有3s的cancellationTokenSource,因此它将检查连接是否仍然存在。当我关闭websocket客户端应用程序时,服务器不会转到WebSocketState.Closed部分,并且当触发取消令牌时,服务器会断开我与客户端的连接。我在这里做错了什么?!提前致谢!

while (socket.State == WebSocketState.Open)
{
   var cancellationSource = new CancellationTokenSource(TimeSpan.FromMilliseconds(3000));
   buffer = new ArraySegment<byte>(new byte[4096]);

   WebSocketReceiveResult received = null;


   try
   {
       received = await socket.ReceiveAsync(buffer, cancellationSource);
   }
   catch (AggregateException e)
   {
       continue;
   }

   switch (received.MessageType)
   {
       case WebSocketMessageType.Close:

           HandleClose(socket);

       break;

       case WebSocketMessageType.Text:
           // Handle text message 

       break;
   }
}

if (socket.State == WebSocketState.Aborted)
{
    // Handle aborted
}
else if (socket.State == WebSocketState.Closed)
{
    HandleClose(socket);
}
else if (socket.State == WebSocketState.CloseReceived)
{

}
else if (socket.State == WebSocketState.CloseSent)
{
}
c# websocket asp.net-core
1个回答
2
投票

如果客户端意外关闭连接,ReceiveAsync将抛出WebSocketException

try
{
    var received = await webSocketConnection.ReceiveAsync(...);
}
catch(WebSocketException webSocketException)
{
    if(webSocketException.WebSocketErrorCode == WebSocketError.ConnectionClosedPrematurely)
    {
        //custom logic
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.