php长连接处理整理

来源:互联网 发布:大数据分析关键技术 编辑:程序博客网 时间:2024/06/05 17:26

每次我们访问PHP脚本的时候,都是当所有的PHP脚本执行完成后,我们才得到返回结果。如果我们需要一个脚本持续的运行,那么我们就要通过php长连接的方式,来达到运行目的。

一般php环境为apache+php+linux,但是由于apache对php连接都有时间限制,一般超过这个连接时间apache服务器会自动断掉连接。

 

方法一

 

这种情况下比较简单方便的方式就是在php页面中设置set_time_limit(0)(当然也可以在php.ini配置文件中设置,但是这样对整个环境产生影响,毕竟我们并不想对所有连接都可以长时间连接,影响服务性能

每个PHP脚本都限制了执行时间,所以我们需要通过 set_time_limit 来设置一个脚本的执行时间为无限长,然后使用 flush() 和 ob_flush() 来清除服务器缓冲区,随时输出脚本的返回值。

 

如下例子:

view plain
  1. <?php   
  2. header("Content-Type: text/plain");   
  3. set_time_limit(0);   
  4.   
  5. whiletrue )   
  6. {   
  7. // 持续执行的脚本  
  8. flush();   
  9. ob_flush();   
  10. sleep(5);   
  11. }   
  12. ?>  

 

当我们执行后,每隔5秒钟,我们会执行一次,通过这一方法,我们可以完成很多功能,例如后台监控程序,定时执行功能,日志分析,数据整理等耗时的操作。

 

 

下面再看一个简单例子,官方文档中例子

view plain
  1. <?php   
  2. header('Content-type: text/plain');   
  3. echo date("H:m:s"), "/n";   
  4. set_time_limit(30);   
  5. for ($i = 0; $i < 1000; $i++)   
  6. {   
  7.   
  8.     echo date("H:m:s"),"/n";   
  9.     for ($r = 0; $r < 100000; $r++){   
  10.     $X.=  tan(M_LNPI+log(ceil(  date("s")*M_PI*M_LNPI+100)));   
  11.     }   
  12.     ob_flush();     
  13.     flush();   
  14.   
  15. }   
  16. echo "work! $x";   
  17. ?>   

 

 

方法二

 

在linux环境下,通过cron配置执行脚本,就是通过linux下php命令执行php文件,这种方式是在php单独环境下执行,不受apache环境限制,可以执行长时间运行的程序 (同样还有j2ee中,jsp长时间执行就会出现断开连接情况,当然通过servlet可以后台一直执行,但是毕竟需要配置web.xml还需要重启环境,不是很方便,这是就可以单独执行java程序,让后通过cron配置linux后台定时执行)

例如:

10 5 * * * /usr/bin/php  /usr/local/run/back_run.php
每天5点10分执行back_run.php脚本程序,这时可以执行任意长时间,执行完后进程自动销毁,执行的时候,可以通过ps -ef|grep back_run.php找到执行中的进程。

该方式可以实现很多php批处理功能。

原创粉丝点击