【发布时间】:2013-04-30 16:42:45
【问题描述】:
目前,我通过将所有已连接用户的连接 ID 映射到实际的应用程序用户,将它们存储在我的数据库中。我在这里所做的非常简单:当OnConnected 事件被触发时,我将连接ID 添加到数据库中。然后,当OnDisconnected 事件被触发时,我从数据库中删除该连接。
但是,在某些情况下(例如,当进程终止时等),我没有收到断开连接事件。这使我的连接表不可靠,因为我无法确定用户是否连接在一个或多个客户端上。例如,下面是我的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 系统并取回断开连接的 ID,以便我可以将它们从数据库内的连接列表中删除。据我从与 David Fowler 的谈话中记得,这在今天是不可能的,但在这种情况下,首选的方法是什么?
【问题讨论】:
标签: asp.net real-time signalr signalr-hub