捕获某人在线时的时间间隔?你会如何实现这个功能?

时间:2010-04-18 14:03:10

标签: algorithm solution

我们的目标是建立时间表,说明用户上线的时间段。 (我们正在谈论的是什么用户以及他在线的位置并不重要)要获取有关在线人员的信息,我们可以调用API方法,someservice.com / api /?call = whoIsOnline

whoIsOnline 方法将为我们提供当前在线用户的列表。但是,没有API方法可以获取有关谁不在线的信息

因此,我们应该使用从 whoIsOnline 获得的信息来构建我们的时间表。当然会出现测量错误(我们无法实时跟踪信息)。假设我们每隔2分钟调用 whoIsOnline 方法(是的,我们将每隔2分钟由cron运行我们的脚本)。

例如,在08:00调用 whoIsOnline 将返回

Peter_id
Michal_id
Andy_id

在08:02致电 whoIsOnline 将返回

Michael_id
Andy_id
George_id

正如你所看到的,彼得已经离线,但我们有新的在线人 - 乔治。

可用的工具是 Db(MySQL)/文本文件/键值存储(Redis / memcache);随意选择其中任何一个(甚至所有这些)。

所以,我们必须得到这样的信息

George_id was online...
12 May: 08:02-08:30, 12:40-12:46, 20:14-22:36 
11 May: 09:10-12:30, 21:45-23:00
10 May: was not online

现在问题......

  1. 您如何存储信息以实施此类时间表?
  2. 您如何查询/计算用户在线时间段的信息?
  3. 其他信息..

    1. 您无法更新有关离线用户的信息,只能更新“当前”在线用户。
    2. 解决方案应该灵活:时间线信息可以表示与任何时区有关。
    3. 我们应该只保留最近7天的信息。
    4. 在线观看的每个用户都会自动在我们的数据库中获取自己的标识符。

    5. Uff ..我写这篇文章真的很难,因为我的英语非常糟糕,但我希望我的问题能为你清楚。

      谢谢。

2 个答案:

答案 0 :(得分:1)

有两种不同的衡量“在线”状态的方法:

  1. 假设当有人点击一个页面时,他们在网上停留一段时间后,例如5分钟。因此,如果他们点击页面4:03,4:05和4:09,他们的在线间隔时间为4:03到4:09-4:14(取决于您对最终点击的算法/假设);或

  2. 使用“心跳”Javascript和/或Flash流程来跟踪网页的打开频率。

  3. (1)更常见。 (2)经常让人们对隐私问题保持谨慎。另一种观察方式是(1)是被动监测,而(2)是主动监测。

    (1)有许多变化。间隔可能不固定。它可能会有所不同,具体取决于用户所在的页面。这可以通过假设或统计抽样甚至只是概率模型来构建。在最简单的情况下“谁在线?”只是在最近5分钟(例如)分钟点击某些内容的用户列表,这很容易理解(因为您正在记录每个页面视图)。

答案 1 :(得分:0)

我会做这样的事情(伪代码)

UPDATE session_log SET last_online = NOW() WHERE user = ... AND last_online = '10 minutes ago'
IF NOT UPDATED:
    INSERT INTO session_log (last_online, user) VALUES(NOW(), user)

当然也应该有created at(或类似)列,但这样您就可以轻松跟踪会话。