2

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

4

3 回答 3

1

以某种方式或其他方式,您将不得不在时间间隔后对服务器进行 ajax 调用以通信/获取在线用户。

于 2012-05-16T15:27:34.050 回答
1

我的建议是每次用户访问页面时更新数据库中的字段。要确定他们是否仍然在线,请检查最后一次访问是否在某个时间间隔内,例如 20 分钟前。如果不是,则假设它们处于脱机状态。

这可能是最简单的方法,尽管它并不完全是“实时的”。如果我只是关闭浏览器就离开了您的网站,那么从那时起 20 分钟后我将不会显示为“离线”。

于 2012-05-16T14:02:29.953 回答
1

以下是您应该如何做的明确看法:

  • 用户请求页面
  • 记录发出请求的时间(将用户标记为活动)
  • 获取最近<N分钟活跃的好友列表
  • 服务页面

基本上,每次页面加载都会刷新用户的“最后一次看到”时间,如果用户在阈值内,则认为该用户处于活动状态。更重要的是,用户处于非活动状态。大多数聊天客户端会在 15 分钟后将用户标记为非活动状态,例如按键等,在我们的例子中,进行页面加载。

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

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

您可以使用WebSocketsExternalInterfaceCall ,但除非您使用 flash 的套接字功能并从 flash 调用 JS,否则它远非跨浏览器。

于 2012-05-16T14:47:26.763 回答