捕获某人在线的时间间隔?您将如何实现此功能?

问题描述 投票:4回答:2

我们的目标是建立时间表,说明用户在线的时间段。 (我们在说什么用户以及他在哪里都没有关系)要获取有关在线用户的信息,我们可以调用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
如您所见,Peter已离线,但我们有新的在线使用者-George。

可用的工具是

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. 您将如何查询/计算有关用户在线时间的信息?
  • 附加信息..

      您不能更新有关离线用户的信息,只能更新“当前”在线的用户。
  • 解决方案应该灵活:可以表示与任何时区有关的时间轴信息。
  • 我们应仅保留最近7天的信息。
  • 每个在线用户都自动在我们的数据库中获取自己的标识符。
  • algorithm solution
    2个回答
    1
    投票
    有两种不同的测量“在线”状态的方法:

    1. 假设当某人单击某个页面后,他们在那之后的某个名义间隔(例如5分钟)内处于在线状态。因此,如果他们点击页面上的4:03、4:05和4:09,则他们的在线时间间隔为4:03到4:09-4:14(取决于您对最终点击做出的算法/假设) );或
    2. 使用“心跳” Javascript和/或Flash进程来跟踪打开页面的频率。

    (1)更常见。 (2)通常会让人们对隐私问题持怀疑态度。另一种查看方式是(1)是被动监视,而(2)是主动监视。

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


    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(或类似)列,但是那样一来,您可以轻松地跟踪会话。
    © www.soinside.com 2019 - 2024. All rights reserved.