目前,我将所有连接的用户连接ID存储在数据库中,方法是将它们映射到实际的应用程序用户。我在这里做的很简单:当OnConnected
事件被触发时,我将连接ID添加到数据库中。然后,我会在触发OnDisconnected
事件时从数据库中删除该连接。跟踪SignalR连接ID以查看它们是否真的存在
但是,在某些情况下(例如,当进程终止等)时,我不会收到断开连接事件。这使得我的连接表不可靠,因为我无法确定用户是否连接到一个或多个客户端。例如,这里是代码我OnDisconnected
方法块:
HubConnection hubConnection = _hubConnectionRepository.GetAll()
.FirstOrDefault(conn => conn.ConnectionId == connectionId);
if (hubConnection != null)
{
_hubConnectionRepository.Delete(hubConnection);
_hubConnectionRepository.Save();
}
if (!_hubConnectionRepository.GetAll().Any(conn => conn.UserId == user.Id))
{
Clients.Others.userDisconnected(username);
}
正如你看到的,我检查是否有关联到该用户的任何其他连接就在我删除他/她的当前连接。根据情况,我向所有连接的客户端发送消息。
我在这里想要的是这样的:能够使用连接ID数组轮询SignalR系统并取回断开连接的数据,以便我可以从数据库中的连接列表中删除它们。据我与David Fowler的谈话记得,今天这是不可能的,但在这种情况下,首选方法是什么?
嗨,我刚开始使用SignalR并希望做一些涉及跟踪。我喜欢你的想法。想知道如果在2年之后,这仍然是正确的方式,或者如果现在有更多类似的解决方案可以作为解决方案。任何人? – 2015-12-10 19:13:18