PHP人员在线离线设计

最近开发有这样的需求,但php又不擅长处理多进程任务,顾尝试找一些解决方案。

我知道的方法可能可以用的有一下几种:

1,可以用Linux crob定时任务+php脚步似乎可以实现,但如果用户比较多的话,也

不怎么好 处理。

2,另外就是ignore_user_abort();//函数,连接断开后可以继续执行,但来做多用户在线离线,好像还是有问题的。网上流行的一段代码就是:

<?php
ignore_user_abort(); //关掉浏览器,PHP脚本也可以继续执行.
set_time_limit(3000); // 通过set_time_limit(0)可以让程序无限制的执行下去
$interval =5; // 每隔5s运行
  
//方法1--死循环
do {
   echo '测试' .time(). '<br/>' ;
   sleep( $interval ); // 等待5s 
} while (true);
  
//方法2---sleep 定时执行
   require_once './curlClass.php' ; //引入文件
    
   $curl = new httpCurl(); //实例化
   $stime = $curl ->getmicrotime();
   for ( $i =0; $i <=10; $i ++){
      
     echo '测试' .time(). '<br/>' ;
     sleep( $interval ); // 等待5s
      
   }
   ob_flush();
   flush ();
   $etime = $curl ->getmicrotime();
   echo '<hr>' ;
   echo round (( $etime -stime),4); //程序执行时间
3,通过session机制,应该也可以,但如果是手机的话,session就有点尴尬了。
4,还有就是可以通过别的语言来实现,数据库共享就可以,反正都是自己开发。c++首选,但不到万不得已,也不愿意在php项目中去再用c++开发一个东西,会被那些人喷死的。
最后网上找了下,感觉下面这个方案应该还可以,基本不存在什么原理性的问题,手机终端和浏览器通用,欢迎大家一起研究讨论:

因为登陆可以统计,但是人家不退出登陆,而是直接关闭浏览器,你这程序还会继续认为他在线。
简单的方法是用文件来存储,


用户登录的时候,生成一个缓存文件,比如当前用户的id为10,
那么,生成的文件的名称为 $fileName = ‘10_’.tme()+600;
后面的部分是到期时间,默认是10分钟以后过期,
当用户访问的时候,你通过glob函数,找出这个文件,删除,然后生成一个新的文件,文件是当前时间后推10分钟。用户如果退出登录,就直接删除这个文件。
也就是说,用户操作一次,这个文件的时间就刷新一次。


统计的时候只要遍历所以文件,找出所有到期时间大于当前时间的文件的数量即可,此方法不仅可以统计,也可以列举出在线的都是谁。
时间不一定是10分钟,可以任意取,也就是超过多少时间无动作就默认当作下线。
文件存储地址可以用hash分组。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值