有很多文章展示了如何使用 SignalR 进行自己的高级连接处理,例如 this blog post about "Mapping ASP.NET SignalR Connections to Real Application Users" .
所有这些解决方案都依赖于 OnDisconnect 事件:
public override Task OnDisconnected()
{
SignalRConnectionManager.RemoveConnection(Context.ConnectionId);
return base.OnDisconnected();
}
只要您可以依赖 OnDisconnected 事件,此方法就有效。如果您的应用程序崩溃/重新启动或服务器重新启动,那么您将不会收到每个连接的 OnDisconnected 事件。
问题:我的数据库中有该连接。我知道其中许多连接已经过时。 SignalR 是否有可能找出连接是否失效?我试过了
Clients.Client[StaleConnectionId]
希望为 null 或在连接 ID 无效的情况下出现异常。
有什么建议吗?
最佳答案
不,无法检查“陈旧”连接。我假设您的麻烦在于以某种方式保留用户状态,并且您想知道何时使它们过期。
SignalR 具有根据空闲事件使连接过期的故障安全机制,因此我建议在您的应用程序逻辑中构建一个空闲功能,通过该功能可以使用户过期。
我已经在 ShootR 中实现了这个逻辑( https://github.com/NTaylorMullen/ShootR ) 如果你想有一个基础来工作。
希望这有帮助!
关于signalr - 确定信号器中的陈旧连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15057084/