SignalR仅用于检查用户是否在线

时间:2014-02-05 20:32:13

标签: signalr asp.net-mvc-5

我想问一下,如果使用SinglR只是为了知道当前用户是否在线,是否是一个好主意?

例如,我有一个带登录系统的小网站,有些我希望显示登录成员。

为此使用signalr是个好主意吗?

如果是这样我应该在每个页面上开始与集线器的连接? (在这种情况下,当用户在页面上导航时,将是在集线器上调用的ReConnected方法,还是OnDisconnected和OnConnected)?

我刚刚开始使用signalr,很好奇ppl的想法。

3 个答案:

答案 0 :(得分:0)

你可以使用SignalR,虽然可能有更好的方法来做到这一点。因此,当用户登录,注销或变为非活动状态时,您将从客户端向服务器发送某种消息,指示状态的变化。您可以将该信息存储在临时数据库中,只要数据库中的值发生更改,您就可以使用SignalR将该信息转发给所有连接的客户端。

答案 1 :(得分:0)

当用户从一个页面移动到另一个页面时,信号器将重新连接。每当用户登录网站时,假设您使用Cookiebase身份验证,用户安全性详细信息将保留在cookie中。因此,在用户注销或会话超时之前,cookie将处于活动状态。所以这里没有Signalr的实际需求。

答案 2 :(得分:0)

我一直在研究同样的事情。根据我的研究,我会说你可以做到这一点,但我想知道它是否是最好的方法。我希望有很多断开,连接和重新连接。如果您将此数据保存在数据库中,则应该预计会有大量数据库流量。如果您只在一台服务器上,那么您可以将其保留在内存中。

还需要注意的是ConnectionId随每次页面刷新而变化。起初,我认为这是愚蠢的,因为我希望连接ID保持一致,所以我可以用它来处理用户的句柄。但是,如果在新选项卡中打开链接然后关闭其中一个链接,则必须将另一个连接保留在存储中。如果ID相同,即使其他选项卡已打开,您也会在断开连接时将其删除,因此您的用户将被错误地标记为离线。

然而,我想到的另一个问题是,如果您只是在一个标签页中浏览网站,那么您将在每次页面加载之间断开连接。因此,您可能会遇到连接一致性问题。

我说用信号器在线存在更常用于聊天室或游戏大厅。所以我说这是可能的,但它是否是一个很好的解决方案 - 我不确定。