我们的目标是建立时间表,说明用户在线的时间段。 (我们在说什么用户以及他在哪里都没有关系)要获取有关在线用户的信息,我们可以调用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)更常见。 (2)通常会让人们对隐私问题持怀疑态度。另一种查看方式是(1)是被动监视,而(2)是主动监视。
(1)有许多变体。间隔可能不是固定的。它可能取决于用户所在的页面。这可以从假设或统计抽样甚至概率模型中构建。最简单的情况是“谁在线?”仅是最近5分钟(例如)内单击过某项的用户列表,很容易弄清楚(因为您正在记录每个页面视图)。
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
(或类似)列,但是那样一来,您可以轻松地跟踪会话。