基于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语法(2)
Oct 09 PHP
PHP生成Flash动画的实现代码
Mar 12 PHP
php foreach循环中使用引用的问题
Nov 06 PHP
PHP中批量生成静态html(命令行下运行PHP)
Apr 19 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
May 13 PHP
php操作redis缓存方法分享
Jun 03 PHP
PHP扩展框架之Yaf框架的安装与使用
May 18 PHP
PHP实现适用于自定义的验证码类
Jun 15 PHP
微信随机生成红包金额算法php版
Jul 21 PHP
php flush无效,IIS7下php实时输出的方法
Aug 25 PHP
Laravel学习教程之model validation的使用示例
Oct 23 PHP
PHP大文件切割上传功能实例分析
Jul 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
中国第一家无线电行
2021/03/01 无线电
用sql命令修改数据表中的一个字段为非空(not null)的语句
2010/06/04 PHP
PHP中PDO的错误处理
2011/09/04 PHP
php中使用$_REQUEST需要注意的一个问题
2013/05/02 PHP
php计划任务之ignore_user_abort函数实现方法
2015/01/08 PHP
使用ThinkPHP生成缩略图及显示
2017/04/27 PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
2020/03/02 PHP
合并table相同单元格的jquery插件分享(很精简)
2011/06/20 Javascript
jquery.tmpl JQuery模板插件
2011/10/10 Javascript
js判断iframe内的网页是否滚动到底部触发事件
2014/03/18 Javascript
JavaScript中的异常捕捉介绍
2014/12/31 Javascript
基于jquery实现即时检查格式是否正确的表单
2016/05/06 Javascript
js实现多图左右切换功能
2016/08/04 Javascript
vue绑定设置属性的多种方式(5)
2017/08/16 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
2018/03/01 Javascript
vue elementUI tree树形控件获取父节点ID的实例
2018/09/12 Javascript
jQuery判断自定义属性data-val用法示例
2019/01/07 jQuery
微信小程序自定义导航栏实例代码
2019/04/05 Javascript
Vue 使用formData方式向后台发送数据的实现
2019/04/14 Javascript
Node.JS用纯JavaScript生成图片或滑块式验证码功能
2019/09/12 Javascript
JavaScript 作用域scope简单汇总
2019/10/23 Javascript
多种类型jQuery网页验证码插件代码实例
2021/01/09 jQuery
[13:55]Newbee vs Team Spirit
2018/06/07 DOTA
[08:53]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS 选手采访
2021/03/11 DOTA
python类继承用法实例分析
2014/10/10 Python
Windows8下安装Python的BeautifulSoup
2015/01/22 Python
Python单元测试框架unittest使用方法讲解
2015/04/13 Python
python编码总结(编码类型、格式、转码)
2016/07/01 Python
Python Json序列化与反序列化的示例
2018/01/31 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
2018/03/31 Python
python中时间模块的基本使用教程
2019/05/14 Python
在jupyter notebook 添加 conda 环境的操作详解
2020/04/10 Python
迎新晚会策划方案
2014/06/13 职场文书
退税申请报告怎么写
2015/05/18 职场文书
某某幼儿园的教育教学管理调研分析报告
2019/11/29 职场文书
Java 深入探究讲解简单工厂模式
2022/04/07 Java/Android