使用jQuery Heartbeat(或PHP)计算在线用户数

时间:2012-07-28 23:24:40

标签: php jquery heartbeat

我目前正在使用此PHP代码来计算当前在线用户的数量:

$session_id = session_id();
$time_stamp = time();
$time_limit = $time_stamp - 300;        //   We give the session only 5 minutes if it exists
$result = $this->select("SELECT * FROM `online_visitors` WHERE `session_id`='$session_id' LIMIT 1");
if (!mysql_num_rows($result)) {
    $tb_col[0] = "visitor_ip";
    $tb_col[1] = "country";
    $tb_col[2] = "session_id";
    $tb_col[3] = "time_stamp";
    $tb_col[4] = "last_time_stamp";
    $tb_data[0] = "'" . $this->visitor_ip . "'";
    $tb_data[1] = "'" . $this->visitor_country . "'";
    $tb_data[2] = "'" . $session_id . "'";
    $tb_data[3] = "'" . $time_stamp . "'";
    $tb_data[4] = "'" . $time_stamp . "'";
    $this->insert("`online_visitors`", $tb_col, $tb_data);
} else {
    $this->update("`online_visitors`", "`visitor_ip`='$this->visitor_ip', `country`='$this->visitor_country', `last_time_stamp`='$time_stamp'", "`session_id`='$session_id'");
}

$this->delete("`online_visitors`", "`last_time_stamp`<'$time_limit'");

但它没有实时更新。我想每30秒查看一次用户数。我可能还想将此表连接到jQuery心跳功能,因此我更可靠地了解目前有多少用户在线。

我接近这个吗?有关如何在jQuery中实现这一点的任何提示(我对它不是很好)?或者我的方法可以改进吗?

我也想改进我的PHP代码

1 个答案:

答案 0 :(得分:0)

你也可以这样做:不是通过ajax更新时间,而是假设用户在线,直到他离开页面或关闭浏览器。在这种情况下,您使用ajax将用户设置为脱机,并在浏览器触发onb​​eforeunload时执行它。在极少数情况下(断电,系统崩溃),此事件不会被触发,因此最好在上次更新时检查是否有浮动用户。