问题陈述 - 想知道特定的网络应用用户是否处于活动状态(即登录并使用网站),并且能够查询活动用户列表或确定用户的活动状态。< / p>
约束 - 不需要精确(即如果用户在特定时间范围内处于活动状态,即使他们已关闭浏览器,也可以说它们处于活动状态)。
我觉得这类问题应该有一个设计模式,但是无法在网上或网上的其他地方找到任何内容。
方法我正在考虑:
维护在用户执行操作(或某些操作子集)时更新的表。然后将查询在某个时间阈值内执行操作的用户。
尝试监控会话信息并维护一个列出登录用户的表格,并在一段时间后超时。
其他一些更标准的做法是什么?
你会如何解决这个问题(再次,从设计模式的角度来看)?
谢谢!
答案 0 :(得分:1)
如果您根据组件或模块而不是表格来考虑它,那么维护它会更加幸运。我看到它的方式,你需要以下接口。
public interface IActiveUsers {
bool IsUserActive(User u);
}
public interface ITrackActiveUsers {
void MarkUserAsActive(User u);
}
您可以使用数据库实现这些,但为什么不使用您选择的Web框架的内置缓存?
基本上将用户标记为活动时,使用“LoggedInUser-1234”等密钥将密钥插入缓存,其中1234是用户的一些唯一标识符。然后只需设置任何你想要的超时(5分钟,10等),并将值设置为true。然后,在查询用户是否处于活动状态时,只需检查缓存是否包含该相同密钥的真值。
答案 1 :(得分:0)
我认为#1是解决问题的合适解决方案,我猜也常见。它允许您决定您认为用户“处于活动状态”的HTTP请求(即决定何时以及是否更新“最后活动”表)和/或对活动进行分类(具有更多“最后XXX活动”列并更新每个用户执行不同操作后的那些)。