2

有许多文章展示了如何使用 SignalR 进行自己的高级连接处理,例如关于“将 ASP.NET SignalR 连接映射到真实应用程序用户”的博客文章

所有这些解决方案都依赖于 OnDisconnect 事件:

public override Task OnDisconnected()
{
    SignalRConnectionManager.RemoveConnection(Context.ConnectionId);
    return base.OnDisconnected();
}

只要您可以依赖 OnDisconnected 事件,它就可以工作。如果您的应用程序崩溃/重新启动或服务器重新启动,那么您将不会获得每个连接的 OnDisconnected 事件。

问题:我的数据库中有连接。我知道其中许多联系都是陈旧的。SignalR 中是否有可能找出连接是否过时?我试过

Clients.Client[StaleConnectionId]

希望在连接 ID 无效的情况下出现 null 或异常。

有什么建议么?

4

1 回答 1

2

不,没有办法检查“陈旧”连接。我假设您的麻烦在于以某种方式保持用户状态,并且您想知道何时使它们过期。

SignalR 具有基于空闲活动使连接过期的故障保险,因此我建议在您的应用程序逻辑中构建空闲功能,您可以通过该功能使用户过期。

我已经在ShootR ( https://github.com/NTaylorMullen/ShootR ) 中实现了这个逻辑,以防你想有一个基础。

希望这可以帮助!

于 2013-02-25T00:13:15.367 回答