【问题标题】:Tracking online status?跟踪在线状态?
【发布时间】:2012-11-16 14:15:31
【问题描述】:

我对 Web 开发很陌生,目前正在开发这个社交网站。

现在我想添加功能来显示一个人是否在线。

现在我想出的一种方法是在数据库中保留在线状态位。

我的问题是如何动态地做到这一点。假设页面已加载并且用户(例如连接)上线。如何在该页面上动态更改该连接的状态。

我想知道是否有任何工具(库)可用于此类跟踪。我的网站是在 python 中使用 django 框架。我认为可以使用 javascript/jquery 来完成一些事情。我想知道我的方向是否正确,或者还有什么我应该研究的吗?

【问题讨论】:

  • 数据库对 IMO 来说有点矫枉过正。研究 Redis 等内存解决方案。
  • @SanjayT.Sharma 谢谢,我会调查的。
  • 由于您与服务器的连接是基于请求-响应的,因此您永远无法知道用户是否仍然在线,只能知道他最后一次在线是什么时候。看看this的回答对你有没有帮助。
  • 虽然内存解决方案可以工作,但如果您已经在使用 django,我相信简单地添加一个“在线”布尔字段会比设置一个全新的内存存储系统更简单。跨度>
  • 你可以找到django的完整解决方案here。当然有些代码有点奇怪,但是编写一个简单的自定义中间件的概念是正确的。

标签: javascript python html django web-applications


【解决方案1】:

正如 Sanjay 所说,更喜欢使用内存解决方案(在线状态的使用非常短暂),例如 Django 缓存(Redis 或 Memcache)。

如果您想要一种简单的方法来更新已加载网页上用户的在线状态,请使用任何库(如 jQuery、AJAX-poll 提供用户状态的 URL),然后更新您的显示您想要的状态的页面。 不要太频繁地轮询这个页面,每 15 秒一次似乎是合理的。

【讨论】:

    【解决方案2】:

    使用last_activity DateTimeFieldOneToOneFieldUser 创建一个新模型。或者,如果您要继承 User,在 django 1.5 中使用自定义 User,或者使用用户配置文件,只需将字段添加到该模型。

    编写一个自定义中间件,在每次请求时自动更新每个用户的last_activity 字段。

    在您的其中一个模型中编写一个is_online 方法,该方法使用时间增量来确定用户的不活动期,以返回一个布尔值以判断他们是否在线。例如,如果他们的 last_activity 早于 15 分钟,则返回 False

    编写一个通过 jQuery ajax 轮询的视图以返回特定用户的在线状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-31
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      • 1970-01-01
      • 2011-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多