牛人分享

长链接

2017-03-16  本文已影响11人  孙燕超

每次我们访问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

header("Content-Type: text/plain");

set_time_limit(0);

while( true )

{

// 持续执行的脚本

flush();

ob_flush();

sleep(5);

}

?>

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

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

view plain

view plain

header('Content-type: text/plain');

echo date("H:m:s"), "/n";

set_time_limit(30);

for ($i = 0; $i < 1000; $i++)

{

echo date("H:m:s"),"/n";

for ($r = 0; $r < 100000; $r++){

$X.=  tan(M_LNPI+log(ceil(  date("s")*M_PI*M_LNPI+100)));

}

ob_flush();

flush();

}

echo "work! $x";

?>  

上一篇 下一篇

猜你喜欢

热点阅读