基于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 22 PHP
php小偷相关截取函数备忘
Nov 28 PHP
PHP代码优化的53个细节
Mar 03 PHP
PHP数组相关函数汇总
Mar 24 PHP
PHP生成唯一订单号的方法汇总
Apr 16 PHP
一个简单安全的PHP验证码类、PHP验证码
Sep 24 PHP
php基于自定义函数记录log日志方法
Jul 21 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
Aug 02 PHP
PHP延迟静态绑定的深入讲解
Apr 02 PHP
PHP静态方法和静态属性及常量属性的区别与介绍
Mar 22 PHP
PHP如何解决微信文章图片防盗链
Dec 09 PHP
PHP面试题 wakeup魔法 Ezpop pop序列化与反序列化
Apr 11 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实时显示输出
2008/10/02 PHP
php数组声明、遍历、数组全局变量使用小结
2013/06/05 PHP
ThinkPHP CURD方法之where方法详解
2014/06/18 PHP
使用Yii2实现主从数据库设置
2016/11/20 PHP
Yii2.0建立公共方法简单示例
2019/01/29 PHP
DOM 脚本编程中的兄弟节点
2009/10/31 Javascript
JavaScript 计算图片加载数量的代码
2011/01/01 Javascript
深入理解JavaScript系列(12) 变量对象(Variable Object)
2012/01/16 Javascript
node.js中的buffer.Buffer.byteLength方法使用说明
2014/12/10 Javascript
node.js中的require使用详解
2014/12/15 Javascript
谈谈JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
2015/10/01 Javascript
自己动手写的javascript前端等待控件
2015/10/30 Javascript
Javascript将数值转换为金额格式(分隔千分位和自动增加小数点)
2016/06/22 Javascript
AngularJS基础 ng-options 指令详解
2016/08/02 Javascript
原生JS实现《别踩白块》游戏(兼容IE)
2017/02/20 Javascript
nodejs中向HTTP响应传送进程的输出
2017/03/19 NodeJs
Nodejs中获取当前函数被调用的行数及文件名详解
2018/12/12 NodeJs
使用Typescript开发微信小程序的步骤详解
2021/01/12 Javascript
Python实现扣除个人税后的工资计算器示例
2018/03/26 Python
pandas如何处理缺失值
2019/07/31 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
2020/04/03 Python
Python如何将函数值赋给变量
2020/04/28 Python
Python logging模块原理解析及应用
2020/08/13 Python
今天学到的CSS最新技术(与图片背景相关)
2012/12/24 HTML / CSS
纯HTML5+CSS3制作生日蛋糕代码
2016/11/16 HTML / CSS
美国Rue La La闪购网站:奢侈品、中高档品牌限时折扣
2016/10/19 全球购物
奥地利购买珠宝和手表网站:ELLA JUWELEN
2019/09/03 全球购物
如何删除一个表里面的重复行
2013/07/13 面试题
.NET面试问题集
2015/12/08 面试题
Java中的类包括什么内容?设计时要注意哪些方面
2012/05/23 面试题
汽车专业大学生职业生涯规划范文
2014/01/07 职场文书
2015民办小学年度工作总结
2015/05/26 职场文书
感恩教师节主题班会
2015/08/12 职场文书
关于教师节的广播稿
2015/08/19 职场文书
员工工作失职检讨书范文!
2019/07/03 职场文书
CSS实现漂亮的时钟动画效果的实例代码
2021/03/30 HTML / CSS