首页 > 解决方案 > 如何在 ASP.NET Core 上保留 websocket 连接?

问题描述

我有一个 ASP.NET Core 应用程序需要通过 websockets 与浏览器进行通信。

服务器配置如下:

        var webSocketOptions = new WebSocketOptions()
        {
            KeepAliveInterval = TimeSpan.FromSeconds(120),
        };                   

        app.UseWebSockets(webSocketOptions);
        app.Use(async (context, next) =>
        {
            if (context.Request.Path == "/ws")
            {                    
                if (context.WebSockets.IsWebSocketRequest)
                {
                    using (var  WS = await context.WebSockets.AcceptWebSocketAsync())
                    {
                        // do some stuff or even nothing
                    }   // <<<<<<<<<<<<<< connection dies here                                                   
                }
                else
                {
                    context.Response.StatusCode = 400;
                }
            }
            else
            {
                await next();
            }
        });

连接在浏览器中正常工作,但在下一个块的末尾,连接自动终止。

using (var  WS = await context.WebSockets.AcceptWebSocketAsync())
{
    // do some stuff or even nothing
}   // <<<<<<<<<<<<<< connection dies here       

我的代码中没有例外,但连接仍然断开。我想这是正常的,因为变量 WS 在using.

我想知道如何在服务器收到连接请求后立即建立 websocket 连接并且不立即销毁。

另外,我看到这段代码

WS = await context.WebSockets.AcceptWebSocketAsync()

每次连接尝试都会创建一个新的 Web 套接字,即使它来自之前连接的同一个客户端。请问可以改变这种行为吗?

谢谢,干杯

标签: c#websocket

解决方案


推荐阅读