1

我如何实现检查功能,用户在grails中是在线还是离线?我可以在数据库中使用状态字段并在每次身份验证时更新该字段的值,还是我必须使用一些 js 的东西?也许你知道一些关于它的导师?

4

2 回答 2

3

假设在线用户是至少 10 分钟前请求应用程序的用户。因此,您可以为用户域创建特殊字段,例如:

User {
  Date lastSeenAt

  static transients = ['online']

  boolean isOnline() {
     return lastSeenAt && lastSeenAt.after(new Date(System.currentTimeMillis() - TimeUnit.MINUTES.toMillis(10))
  } 
}

并定期在过滤器或控制器中更新它:

User user = //...   
if (!user.lastSeenAt || user.lastSeenAt.before(new Date(System.currentTimeMillis() - TimeUnit.MINUTES.toMillis(5))
  user.lastSeenAt = new Date()
  user.save()
}

可能您不应该在每次请求时都更新它,除非上次更新是在一段时间前进行的,在这个例子中是 5 分钟。这个值可以更低,取决于你喜欢什么精度。

于 2012-07-08T11:08:57.957 回答
0

在很多地方这样做的方式是检查用户的最后一个活动。如果从现在到最后一个活动的时间达到某个点,则将用户标记为离线。

于 2012-07-08T09:55:08.730 回答