我们的目标是建立时间表,说明用户上线的时间段。 (我们正在谈论的是什么用户以及他在线的位置并不重要)要获取有关在线人员的信息,我们可以调用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
现在问题......
其他信息..
Uff ..我写这篇文章真的很难,因为我的英语非常糟糕,但我希望我的问题能为你清楚。
谢谢。
答案 0 :(得分:1)
有两种不同的衡量“在线”状态的方法:
假设当有人点击一个页面时,他们在网上停留一段时间后,例如5分钟。因此,如果他们点击页面4:03,4:05和4:09,他们的在线间隔时间为4:03到4:09-4:14(取决于您对最终点击的算法/假设);或
使用“心跳”Javascript和/或Flash流程来跟踪网页的打开频率。
(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
(或类似)列,但这样您就可以轻松跟踪会话。