某些客户端的 ASP.NET Core 3.1 SignalR 连接在 2 分钟后重新连接

问题描述

我有一个带有 signalr 的 asp.net core 3.1 项目。我的一些用户似乎每 2 分钟断开/重新连接他们的 websockets 信号器连接:

logs of 2 minute reconnections

这张图表可以更好地形象化:

2 minute reconnections chart

我知道认情况下,由 asp.net 控制的 websocket 有 2 分钟的 keepalive 超时 - 但据我所知,signalr 也有它自己的 ping/keepalive 消息,专门用于避免 websocket 超时 - 如果我打开我的我可以清楚地看到那些:

websockets keepalive messages

那么问题是:为什么有些人的连接会在 2 分钟后断开?

编辑 1:删除了我的 mac/linux 理论,因为我在日志中发现了一些 Windows 客户端

编辑 2:我设法从受影响的客户端之一获得控制台日志:

console log from client

解决方法

这是由于 ASP.NET 核心服务器中的 KeepAlive 设置默认为 2 分钟。

Documentation here !

添加乒乓机制以保持 websocket 连接打开或提高此设置。