加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 跟踪SignalR连接ID以查看它们是否真的存在

发布时间:2020-12-16 06:48:58 所属栏目:asp.Net 来源:网络整理
导读:目前,我将所有连接用户的连接ID存储在我的数据库中,方法是将它们映射到实际的应用程序用户.我在这里做的很简单:在触发OnConnected事件时,我将连接ID??添加到数据库.然后,当触发OnDisconnected事件时,我从数据库中删除该连接. 但是,在某些情况下(例如,当进程
目前,我将所有连接用户的连接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,以便我可以从数据库内的连接列表中删除它们.据我在与大卫福勒的谈话中记得,今天这是不可能的,但在这种情况下,首选方法是什么?

解决方法

这只是一个想法.

在服务器上:
Clients.All.ping()

在客户:
hub.client.ping = function(){
??hub.server.pingResponse();
}

在服务器上:void pingResponse(){Context.ConnectionId; //更新数据库}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读