基于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 相关文章推荐
Windows中安装Apache2和PHP4权威指南
Nov 18 PHP
php下MYSQL limit的优化
Jan 10 PHP
php minixml详解
Jul 19 PHP
php学习笔记 面向对象中[接口]与[多态性]的应用
Jun 16 PHP
php中sql注入漏洞示例 sql注入漏洞修复
Jan 24 PHP
zf框架db类的分页示例分享
Mar 14 PHP
php实现用于验证所有类型的信用卡类
Mar 24 PHP
实例简介PHP的一些高级面向对象编程的特性
Nov 27 PHP
Zend Framework基本页面布局分析
Mar 19 PHP
详解PHP中websocket的使用方法
Sep 15 PHP
php实现统计IP数及在线人数的示例代码
Jul 22 PHP
Laravel中获取IP的真实地理位置
Apr 01 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
Centos7 Yum安装PHP7.2流程教程详解
2019/07/02 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
2019/09/16 PHP
详解PHP中的8个魔术常量
2020/07/06 PHP
Javascript类库的顶层对象名用户体验分析
2010/10/24 Javascript
JavaScript中“+”的陷阱深刻理解
2012/12/04 Javascript
判断滚动条到底部的JS代码
2013/11/04 Javascript
javascript不同类型数据之间的运算的转换方法
2014/02/13 Javascript
Node.js事件循环(Event Loop)和线程池详解
2015/01/28 Javascript
浅谈JavaScript中的String对象常用方法
2015/02/25 Javascript
易操作的jQuery表单提示插件
2015/12/01 Javascript
Bootstrap轮播加上css3动画,炫酷到底!
2015/12/22 Javascript
Jquery调用iframe父页面中的元素及方法
2016/08/23 Javascript
bootstrap警告框使用方法解析
2017/01/13 Javascript
jQuery插件zTree实现删除树子节点的方法示例
2017/03/08 Javascript
vue元素实现动画过渡效果
2017/07/01 Javascript
js实现轮播图的两种方式(构造函数、面向对象)
2017/09/30 Javascript
vue解决跨域路由冲突问题思路解析
2017/11/03 Javascript
开发Vue树形组件的示例代码
2017/12/21 Javascript
element-ui组件中input等的change事件中传递自定义参数
2019/05/22 Javascript
微信小程序开发注意指南和优化实践(小结)
2019/06/21 Javascript
解决vue项目axios每次请求session不一致的问题
2020/10/24 Javascript
python3下实现搜狗AI API的代码示例
2018/04/10 Python
pandas按若干个列的组合条件筛选数据的方法
2018/04/11 Python
django的聚合函数和aggregate、annotate方法使用详解
2019/07/23 Python
python修改文件内容的3种方法详解
2019/11/15 Python
css3实现信纸/同学录效果的示例代码
2018/12/11 HTML / CSS
HTML5组件Canvas实现图像灰度化(步骤+实例效果)
2013/04/22 HTML / CSS
PHP数据运算类型都有哪些
2013/11/05 面试题
应届毕业生的个人自我鉴定
2013/10/24 职场文书
中年人生感言
2014/02/04 职场文书
“六查”、“三学”、“三干”查摆问题整改措施
2014/09/27 职场文书
单位委托书
2014/10/15 职场文书
中学教师师德师风承诺书
2015/04/28 职场文书
劳动仲裁代理词范文
2015/05/25 职场文书
小学生大队委竞选稿
2015/11/20 职场文书
win11怎么消除图标小盾牌?win11消除图标小盾牌解决方法
2022/08/05 数码科技