是否可以在不使用ajax请求的情况下检查用户是否在线?

时间:2012-05-16 13:52:29

标签: php jquery real-time user-experience

我正在寻找一种解决方案来显示在线用户/朋友,如果可能的话,不使用ajax(实时)。我想避免在每个指定的时间间隔之后对服务器发出的ajax请求,以检查用户是否在线。目前应用程序工作正常并显示在线用户,但是服务器发出巨大请求,以检查用户是否使用ajax方法在线。另外由于大量的ajax调用,有时浏览器行为也会受到影响。 [有关更多信息:我正在使用MySql数据库,PHP,Jquery。]

3 个答案:

答案 0 :(得分:1)

我的建议是每次用户访问页面时更新数据库中的字段。要确定它们是否仍在线,请检查此最后一次访问是否在20分钟前的特定时间间隔内。如果没有,假设他们离线。

这可能是最简单的方法,虽然它并不完全是“实时”的。如果我通过关闭浏览器离开您的网站,那么直到20分钟后我才会显示为“离线”。

答案 1 :(得分:1)

以下是您应该如何做的明确考虑:

  • 用户请求页面
  • 记录请求的时间(将用户标记为活动状态)
  • 获取最后一个活跃的朋友列表< N分钟
  • 提供页面

基本上,每个页面加载都会刷新用户的“上次看到”时间,并在用户处于阈值范围内时将用户视为活动状态。大于此,用户处于非活动状态。大多数聊天客户端在15分钟没有做任何事情后将用户标记为非活动状态,例如击键等。在我们的情况下,执行页面加载。

如果你想要实时数据,除了使用AJAX(间隔轮询和连接保持)之外,没有其他(更好的)方法。我之前使用的一些原始技术(除了ajax之外)触发页面加载包括:

  • 隐藏的,不断刷新的iframe,或加载好友列表的iframe间隔
  • 使用路由URL间隔加载1x1缓存丢失的GIF,以便它将通过日志记录机制。

你可以使用WebSockets,但是除非你使用flash和ExternalInterfaceCall的套接字功能从flash调用JS,否则它远不是当时的跨浏览器。

答案 2 :(得分:1)

在某种程度上,您必须在时间间隔之后对服务器进行ajax调用,以便与用户进行通信/联系。