基于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编程最快明白》第五讲:php目录、文件操作
Nov 01 PHP
php性能优化分析工具XDebug 大型网站调试工具
May 22 PHP
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
Dec 19 PHP
PHP中几种常见的超时处理全面总结
Sep 11 PHP
写一段简单的PHP建立文件夹代码
Jan 06 PHP
PHP输出一个等腰三角形的方法
May 12 PHP
php技术实现加载字体并保存成图片
Jul 27 PHP
php验证码生成代码
Nov 11 PHP
php验证手机号码
Nov 11 PHP
php加密解密字符串示例
Oct 13 PHP
ThinkPHP 模板引擎使用详解
May 07 PHP
PHP大文件分割分片上传实现代码
Dec 09 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
PHP数据库操作面向对象的优点
2006/10/09 PHP
提升PHP速度全攻略
2006/10/09 PHP
PHP的Yii框架中移除组件所绑定的行为的方法
2016/03/18 PHP
Yii2前后台分离及migrate使用(七)
2016/05/04 PHP
php动态读取数据清除最右边距的方法
2017/04/12 PHP
Track Image Loading效果代码分析
2007/08/13 Javascript
asp.net+js 实现无刷新上传解析csv文件的代码
2010/05/17 Javascript
等待指定时间后自动跳转或关闭当前页面的js代码
2013/07/09 Javascript
js图片向右一张张滚动效果实例代码
2013/11/23 Javascript
JS输入用户名自动显示邮箱后缀列表的方法
2015/01/27 Javascript
JavaScript实现SHA-1加密算法的方法
2015/03/11 Javascript
浅谈Javascript实现继承的方法
2015/07/06 Javascript
JS中如何比较两个Json对象是否相等实例代码
2016/07/13 Javascript
AngularJS入门教程之ng-class 指令用法
2016/08/01 Javascript
JavaScript中的this陷阱的最全收集并整理(没有之一)
2017/02/21 Javascript
js学习总结_选项卡封装(实例讲解)
2017/07/13 Javascript
laravel5.4+vue+element简单搭建的示例代码
2017/08/29 Javascript
Vue header组件开发详解
2018/01/26 Javascript
jQuery实现的鼠标响应缓冲动画效果示例
2018/02/13 jQuery
详解Vue中使用Echarts的两种方式
2018/07/03 Javascript
layer更改皮肤的实现方法
2019/09/11 Javascript
这15个Vue指令,让你的项目开发爽到爆
2019/10/11 Javascript
Vue+Spring Boot简单用户登录(附Demo)
2020/11/12 Javascript
使用AutoJs实现微信抢红包的代码
2020/12/31 Javascript
[01:24:51]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第二场
2014/05/26 DOTA
python图像处理之反色实现方法
2015/05/30 Python
利用python将pdf输出为txt的实例讲解
2018/04/23 Python
pandas.DataFrame.to_json按行转json的方法
2018/06/05 Python
python3+selenium实现126邮箱登陆并发送邮件功能
2019/01/23 Python
Python实现的统计文章单词次数功能示例
2019/07/08 Python
PYcharm 激活方法(推荐)
2020/03/23 Python
建筑自我鉴定
2013/10/19 职场文书
2015年七一建党节演讲稿
2015/03/19 职场文书
实习报告怎么写
2019/06/20 职场文书
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
2021/05/24 Python
MySQL Shell import_table数据导入的实现
2021/08/07 MySQL