基于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在线代理转向代码
May 05 PHP
php数组中删除元素的实现代码
Jun 22 PHP
强烈声明: 不要使用(include/require)_once
Jun 06 PHP
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
Jul 18 PHP
php计算函数执行时间的方法
Mar 20 PHP
php开发微信支付获取用户地址
Oct 04 PHP
在Mac OS上自行编译安装Apache服务器和PHP解释器
Dec 24 PHP
PHP命名空间namespace用法实例分析
Sep 27 PHP
PHP递归遍历指定文件夹内的文件实现方法
Nov 15 PHP
PHP编程中的Session阻塞问题与解决方法分析
Aug 07 PHP
Laravel使用scout集成elasticsearch做全文搜索的实现方法
Nov 30 PHP
关于php开启错误提示的总结
Sep 24 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 Undefined index的问题
2009/06/01 PHP
PHP实现的服务器一致性hash分布算法示例
2018/08/09 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
不要小看注释掉的JS 引起的安全问题
2008/12/27 Javascript
javascript 函数调用规则
2009/08/26 Javascript
Jquery 弹出层插件实现代码
2009/10/24 Javascript
js 静态动态成员 and 信息的封装和隐藏
2011/05/29 Javascript
自己动手开发jQuery插件教程
2011/08/25 Javascript
Javascript中对象继承的实现小例
2014/05/12 Javascript
可以浮动某个物体的jquery控件用法实例
2015/07/24 Javascript
微信jssdk用法汇总
2016/07/16 Javascript
jQuery Validate设置onkeyup验证的实例代码
2016/12/09 Javascript
jQuery中弹出iframe内嵌页面元素到父页面并全屏化的实例代码
2016/12/27 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
2017/01/08 Javascript
ES6中数组array新增方法实例总结
2017/11/07 Javascript
vue数组对象排序的实现代码
2018/06/20 Javascript
Vue用v-for给循环标签自身属性添加属性值的方法
2018/10/18 Javascript
p5.js实现故宫橘猫赏秋图动画
2019/10/23 Javascript
[01:03:56]Mineski vs TNC 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
python读写ini文件示例(python读写文件)
2014/03/25 Python
跟老齐学Python之Python安装
2014/09/12 Python
python获取文件扩展名的方法
2015/07/06 Python
python使用pil库实现图片合成实例代码
2018/01/20 Python
解决pandas中读取中文名称的csv文件报错的问题
2018/07/04 Python
Python常用数据类型之间的转换总结
2019/09/06 Python
Python 2种方法求某个范围内的所有素数(质数)
2020/01/31 Python
python库skimage给灰度图像染色的方法示例
2020/04/27 Python
python正则表达式的懒惰匹配和贪婪匹配说明
2020/07/13 Python
Python3爬虫中关于中文分词的详解
2020/07/29 Python
英国电子产品购物网站:Tech in the basket
2019/11/08 全球购物
电气工程及自动化专业自荐书范文
2013/12/18 职场文书
初三物理教学反思
2014/01/21 职场文书
秋季校运动会广播稿
2014/02/23 职场文书
企业新年寄语
2014/04/04 职场文书
Python OpenCV快速入门教程
2021/04/17 Python
教你怎么用python实现字符串转日期
2021/05/24 Python