c# - 如何在 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 套接字,即使它来自之前连接的同一个客户端。请问可以改变这种行为吗?
谢谢,干杯
解决方案
推荐阅读
- python - Pandas - 如何识别系列中的“nan”值
- python - 带有嵌套字典的 Python urlencode 不如预期
- c++ - c ++ qt如何在图像上绘制图像
- rust - 如何将 u32 与可以取负值的动态 int 相加?
- reactjs - React.js 中的日期选择器周视图
- azure - Azure 堡垒主机:使用 Active Directory 登录
- typescript - (重新)在 SSR/CSR NextJS 应用程序中正确使用 Apollo 缓存
- flutter - ClientException(接收数据时连接关闭)
- vb.net - 即使在后期绑定的情况下,编译器也无法理解为什么编译器要求引用类库
- anylogic - 行人怪异行为中的特工