基于php实现长连接的方法与注意事项的问题


Posted in PHP onMay 10, 2013

php可以通过set_time_limit(0);来取消php脚步超时限制,从而达到长连接的效果。

例子代码如下:

<?php
echo "每隔3秒输出一次<br />";
set_time_limit(0); //保证php程序运行不超时退出
while(1) {
   echo date("H:i:s")."<br />";
   ob_flush();
   flush(); //刷新并输出PHP缓冲数据
   sleep(3); //延迟3秒
}
?>

示例代码2:

set_time_limit(0);
header("Connection:Keep-Alive");
header("Proxy-Connection:Keep-Alive");
for($i=0;$i<60;$i++) {
   print 'text'.$i.'<br>';
   ob_flush();
   flush();
   sleep(1);
   clearstatcache();
}

这里调用了ob_flush();   flush();来强制输出数据到缓冲区,这样就能在脚步返回之前及时返回数据到浏览器。另外不冲下flush和ob_flush的使用上有一些特别容易犯错的地方,造成无法刷新输出缓冲。

一. flush和ob_flush的正确顺序,正确应是,先ob_flush再flush,如下:

ob_flush();

flush();

如果Web服务器的操作系统是windows系统,那顺序颠倒或者不使用ob_flush()也不会出现问题。但是在Linux系统上就无法刷新输出缓冲。
 

二. 使用ob_flush()前,确保前面的内容大小足够4069字符。

一些Web服务器的output_buffering默认是4069字符或者更大,即输出内容必须达到4069字符服务器才会flush刷新输出缓冲,为了确保flush有效,最好在ob_flush()函数前有以下语句:

print str_repeat(" ", 4096);

以确保到达output_buffering值。

for ($i=10; $i>0; $i--)
{
echo $i.'<br />';
ob_flush();
flush();
sleep(1);
}
ob_end_flush();
PHP 相关文章推荐
用PHP制作静态网站的模板框架(四)
Oct 09 PHP
echo(),print(),print_r()之间的区别?
Nov 19 PHP
PHP中利用substr_replace将指定两位置之间的字符替换为*号
Jan 27 PHP
php截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
Jun 10 PHP
PHP中使用strpos函数实现屏蔽敏感关键字功能
Aug 21 PHP
PHP+MYSQL实现用户的增删改查
Mar 24 PHP
Zend Framework自定义Helper类相关注意事项总结
Mar 14 PHP
php操作路径的经典方法(必看篇)
Oct 04 PHP
PHP快速推送微信模板消息
Apr 14 PHP
详解PHP防止盗链防止迅雷下载的方法
Apr 26 PHP
php实现的双色球算法示例
Jun 20 PHP
php简单读取.vcf格式文件的方法示例
Sep 02 PHP
Apache服务器无法使用的解决方法
May 08 #PHP
setcookie中Cannot modify header information-headers already sent by错误的解决方法详解
May 08 #PHP
PHP 登录记住密码实现思路
May 07 #PHP
php启动时候提示PHP startup的解决方法
May 07 #PHP
深入phpMyAdmin的安装与配置的详细步骤
May 07 #PHP
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
May 07 #PHP
wamp下修改mysql访问密码的解决方法
May 07 #PHP
You might like
Apache, PHP在Windows 9x/NT下的安装与配置 (一)
2006/10/09 PHP
php抽象方法和抽象类实例分析
2016/12/07 PHP
php 数组元素快速去重
2017/05/05 PHP
Codeigniter里的无刷新上传的实现代码
2019/04/14 PHP
PHP使用PDO、mysqli扩展实现与数据库交互操作详解
2019/07/20 PHP
laravel5.5添加echarts实现画图功能的方法
2019/10/09 PHP
escape、encodeURI、encodeURIComponent等方法的区别比较
2006/12/27 Javascript
struts2+jquery组合验证注册用户是否存在
2014/04/30 Javascript
JavaScript实现身份证验证代码
2016/02/17 Javascript
原生javascript 学习之js变量全面了解
2016/07/14 Javascript
Javascript设计模式之装饰者模式详解篇
2017/01/17 Javascript
JS中的Replace()传入函数时的用法详解
2017/09/11 Javascript
防止页面url缓存中ajax中post请求的处理方法
2017/10/10 Javascript
webstrom Debug 调试vue项目的方法步骤
2018/07/17 Javascript
js中null与空字符串&quot;&quot;的区别讲解
2019/01/17 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
vue中解决拖拽改变存在iframe的div大小时卡顿问题
2020/07/22 Javascript
Python中用于检查英文字母大写的isupper()方法
2015/05/19 Python
tensorflow构建BP神经网络的方法
2018/03/12 Python
在Pandas中给多层索引降级的方法
2018/11/16 Python
Python对称的二叉树多种思路实现方法
2020/02/28 Python
python基于openpyxl生成excel文件
2020/12/23 Python
CSS3轻松实现清新 Loading 效果的简单实例
2016/06/06 HTML / CSS
BLACKMORES澳洲官网:澳大利亚排名第一的保健品牌
2018/09/27 全球购物
精美的手工家居和生活用品:Nkuku
2019/11/01 全球购物
波兰运动鞋网上商店:Distance.pl
2020/07/30 全球购物
实习生自我评价
2014/01/18 职场文书
中式婚礼主持词
2014/03/13 职场文书
法人授权委托书
2014/04/03 职场文书
工作会议方案
2014/05/21 职场文书
乡镇领导干部个人对照检查材料思想汇报
2014/09/23 职场文书
初中成绩单评语
2014/12/29 职场文书
关爱留守儿童主题班会
2015/08/13 职场文书
html2 canvas svg不能识别的解决方案
2021/06/03 HTML / CSS
vue-router中hash模式与history模式的区别
2021/06/23 Vue.js
Ruby处理YAML和json数据
2022/04/18 Ruby