长链接

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

?>  

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 个人学习批处理的初衷来源于实际工作;在某个迭代版本有个BS(安卓手游模拟器)大需求,从而在测试过程中就重复涉及到...
    Luckykailiu阅读 4,780评论 0 11
  • Facebook家的SocketRocket应该是OC语言里针对WebSocket最好的框架啦,因为业务需求,我们...
    绿绿清欢阅读 10,381评论 5 43
  • php.ini设置,上传大文件: post_max_size = 128Mupload_max_filesize ...
    bycall阅读 6,834评论 3 64
  • 更改ip和dnsVi /etc/sysconfig/network-scripts/ifcfg-eth0vi /...
    Xwei_阅读 1,859评论 0 3
  • 已查验: peach x 几种可行性:vanilla shell / warm sunbeige/sunbeige...
    2085阅读 129评论 0 0