如何在php聊天系统中获得确切数量的在线用户?

时间:2012-07-18 11:35:54

标签: php ajax

我使用php和ajax创建了一个聊天系统。当用户登录此聊天系统时,在表is_online字段状态更新为1.我使用此字段列出当前在线成员。

如果用户关闭我网站的所有标签而不按注销,我必须将状态更新为0。

我该怎么做?

4 个答案:

答案 0 :(得分:2)

没有失败证明,实时,有效的方法

从理论上讲,有 NO 方式可以安全地确定浏览器的状态。有DOM onunload onbeforeunload 事件等事件。可能是您可以附加一个AJAX请求作为对该事件的响应。这将设置online=0。但问题是无法保证此事件总是会触发。 (就像当浏览器进程被杀死时会发生什么?)

唯一的标准解决方案是定期向服务器发送非常轻的AJAX请求。服务器端程序应该为每个用户维护lastSeenAtTime字段,并在某个特定时间内没有得到请求时自动设置为零(如10分钟可能是?)

答案 1 :(得分:0)

跟踪表格中的最后一条消息/操作。要更新计数器,请仅选择那些最后一次操作不超过1分钟前的计数器。而且,如果你愿意,可以使用它的is_online,这将保持注销的轨道:)

答案 2 :(得分:0)

非常糟糕的方法。


制作包含字段online_usersname的表timeout。 存储用户的名称(或ID或任何其他标识)和当前时间戳+ 5分钟(或您决定的不同阈值)。

在显示在线用户时,从该表中选择timeout比当前时间戳更大的所有用户。 例如:

$time = time();
$result = mysql_query("SELECT `name` FROM `online_users` WHERE `timeout` > '$time'");

并设置一个CRON,每天清洁一次。

不要忘记更新timeout

答案 3 :(得分:-1)

我认为你应该每隔5分钟检查一次用户的活动,比如yahoo msgr,当用户关闭他的电脑雅虎显示在线状态时。但是5分钟后它显示离线。它是我的算法。我认为你不能每秒检查一次,它会缩短你的检查时间