基于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的5个入手程序
Nov 23 PHP
PHP Stream_*系列函数
Aug 01 PHP
php生成随机密码的几种方法
Jan 17 PHP
php 归并排序 数组交集
May 10 PHP
php记录日志的实现代码
Aug 08 PHP
利用php绘制饼状图的实现代码
Jun 07 PHP
php上传图片到指定位置路径保存到数据库的具体实现
Dec 30 PHP
PHP登录环节防止sql注入的方法浅析
Jun 30 PHP
PHP JSON格式的中文显示问题解决方法
Apr 09 PHP
php利用smtp类实现电子邮件发送
Oct 30 PHP
总结PHP代码规范、流程规范、git规范
Jun 18 PHP
PHP观察者模式实例分析【对比JS观察者模式】
May 22 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
js 匿名调用实现代码
2009/06/19 Javascript
filters.revealTrans.Transition使用方法小结
2010/08/19 Javascript
js中判断数字\字母\中文的正则表达式 (实例)
2012/06/29 Javascript
不到30行JS代码实现Excel表格的方法
2014/11/15 Javascript
JavaScript分页功能的实现方法
2015/04/25 Javascript
Labelauty?jQuery单选框/复选框美化插件分享
2015/09/26 Javascript
jQuery解决浏览器兼容性问题案例分析
2016/04/15 Javascript
jQuery基础的工厂函数以及定时器的经典实例分析
2016/05/20 Javascript
Nodejs+Socket.io实现通讯实例代码
2017/02/13 NodeJs
JS+html5制作简单音乐播放器
2020/09/13 Javascript
12个非常有用的JavaScript技巧
2017/05/17 Javascript
基于vue.js快速搭建图书管理平台
2017/10/29 Javascript
vue之延时刷新实例
2019/11/14 Javascript
使用js和canvas实现时钟效果
2020/09/08 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS NE
2014/05/22 DOTA
12步入门Python中的decorator装饰器使用方法
2016/06/20 Python
Python调用微信公众平台接口操作示例
2017/07/08 Python
python密码错误三次锁定(实例讲解)
2017/11/14 Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
2018/02/21 Python
python assert的用处示例详解
2019/04/01 Python
opencv 图像滤波(均值,方框,高斯,中值)
2020/07/08 Python
Html5 APP中监听返回事件处理的方法示例
2018/03/15 HTML / CSS
俄罗斯香水在线商店:AromaCode
2019/12/04 全球购物
大学生个人求职信范文
2013/09/21 职场文书
医药营销专业个人自荐信
2013/09/29 职场文书
护理专业自荐信
2013/12/03 职场文书
找工作最新求职信
2013/12/22 职场文书
留学推荐信写作指南
2014/01/25 职场文书
生产部管理制度
2014/01/31 职场文书
接待员岗位责任制
2014/02/10 职场文书
职务聘任书范文
2014/03/29 职场文书
家长会欢迎标语
2014/06/24 职场文书
校园广播稿100字
2014/10/06 职场文书
法律意见书范文
2015/06/04 职场文书
JavaScript实现酷炫的鼠标拖尾特效
2022/02/18 Javascript
Windows server 2012 配置Telnet以及用法详解
2022/04/28 Servers