web开发之在线人数统计

需求:

统计当前在线人数(当前访问网站的用户)


思路:

第一步,把访客的信息存入到数据库,每次访问或者刷新页面的时候,都更新该访客在数据库中的记录,也就是更新该访客的最后活动时间。

第二步,删除很长时间 “无动作” 的访客记录,保证数据表里面的数据最新。


问题:

思路中的第一步没有问题,问题在于第二步。假设我的应用访客并发数为100万,那么我的数据访客表中的数据至少有100万条,如果每个用户每次访问都要遍历整张表,找出“无动作”的用户,然后把他的记录删掉,所耗资源太大。


解决方法:

模仿session的回收机制。php处理session的机制是,设置一个概率,让用户有一定概率触发php的垃圾回收程序,从而删除没用的session文件。php的配置文件里面有session.gc_probability = 1;session.gc_divisor     = 100;这两个设置,这里表示有1/100的概率触发gc进程。就是说,100个用户访问,当调用session_start()的时候,可能会有一次触发gc进程,从而删除无用的session文件。

所以,我们也可以采用这个思想,设置一个概率,让用户访问的时候,有概率地触发【删除“无动作”的用户】的操作。


具体代码实现:

   创建数据库:test

创建数据库表:pre_online

session_id,activity_time

php代码:

0){
    	$sql = 'UPDATE online set active_time='.time().' where session_id="'.session_id().'"';
    }else{
    	$sql = 'INSERT into online(session_id,active_time) VALUES("'.session_id().'",'.time().')';	
    }
    mysql_query($sql);
    /* 有概率地删除离线用户,类似于session的垃圾回收机制 */
    if($rand==1){
    	mysql_query('DELETE FROM online WHERE active_time<'.(time()-$time));
    }
?>


你可能感兴趣的:(PHP,web,在线访客统计)