有很多文章介绍如何使用this blog post about "Mapping ASP.NET SignalR Connections to Real Application Users"等SignalR进行高级连接处理。
所有这些解决方案都依赖于OnDisconnect事件:
public override Task OnDisconnected()
{
SignalRConnectionManager.RemoveConnection(Context.ConnectionId);
return base.OnDisconnected();
}
只要您可以依赖OnDisconnected事件,这就有效。如果您的应用程序崩溃/重新启动或服务器重新启动,那么您将无法获得每个连接的OnDisconnected事件。
问题:我的数据库中有连接。我知道其中许多连接都是陈旧的。 SignalR是否有可能发现连接是否陈旧?我试过了
Clients.Client[StaleConnectionId]
希望在连接ID无效的情况下为null或异常。
有什么建议吗?
答案 0 :(得分:2)
没有办法检查“陈旧”连接。我假设你的麻烦在于以某种方式坚持用户状态,你想知道什么时候过期。
SignalR的安全失败使得基于空闲活动的连接失效,因此我建议在您的应用程序逻辑中构建一个空闲功能,以便用户过期。
我已经在ShootR(https://github.com/NTaylorMullen/ShootR)中实现了这个逻辑,以防您希望有一个基础来解决问题。
希望这有帮助!