基于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 09 PHP
留言板翻页的实现详解
Oct 09 PHP
php中定时计划任务的实现原理
Jan 08 PHP
PHP设计模式之结构模式的深入解析
Jun 13 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
Jul 01 PHP
Yii 快速,安全,专业的PHP框架
Sep 03 PHP
PHP中字符安全过滤函数使用小结
Feb 25 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
Feb 14 PHP
thinkPHP批量删除的实现方法分析
Nov 09 PHP
微信公众平台开发(五) 天气预报功能开发
Dec 03 PHP
PHP配置ZendOpcache插件加速
Feb 14 PHP
PHP递归算法的简单实例
Feb 28 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
967 个函式
2006/10/09 PHP
解析将多维数组转换为支持curl提交的一维数组格式
2013/07/08 PHP
php去除html标记的原生函数详解
2015/01/27 PHP
php使用timthumb生成缩略图的方法
2016/01/22 PHP
使用Composer安装Yii框架的方法
2016/03/15 PHP
php 微信开发获取用户信息如何实现
2016/12/13 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
2017/05/02 PHP
微信小程序发送订阅消息的方法(php 为例)
2019/10/30 PHP
动态加载外部javascript文件的函数代码分享
2011/07/28 Javascript
Jquery 动态生成表格示例代码
2013/12/24 Javascript
jQuery层级选择器用法分析
2015/02/10 Javascript
JavaScript中的Promise使用详解
2015/06/24 Javascript
node.js微信公众平台开发教程
2016/03/04 Javascript
微信小程序 canvas API详解及实例代码
2016/10/08 Javascript
javascript鼠标跟随运动3种效果(眼球效果,苹果菜单,方向跟随)
2016/10/27 Javascript
Angular2 之 路由与导航详细介绍
2017/05/26 Javascript
vue组件定义,全局、局部组件,配合模板及动态组件功能示例
2019/03/19 Javascript
处理JavaScript值为undefined的7个小技巧
2020/07/28 Javascript
Vue中的nextTick作用和几个简单的使用场景
2021/01/25 Vue.js
[08:44]和酒神一起战斗 DOTA2教你做大人
2014/03/27 DOTA
python下载文件记录黑名单的实现代码
2017/10/24 Python
Python判断字符串是否xx开始或结尾的示例
2019/08/08 Python
python异常处理和日志处理方式
2019/12/24 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
HTML5使用DOM进行自定义控制示例代码
2013/06/08 HTML / CSS
HTML5实现自带进度条和滑块滑杆效果
2018/04/17 HTML / CSS
HTML5自定义元素播放焦点图动画的实现
2019/09/25 HTML / CSS
英国最大的天然和有机产品在线零售商之一:Big Green Smile
2020/05/06 全球购物
毕业生就业推荐信范文
2013/12/01 职场文书
学校采购员岗位职责
2014/01/02 职场文书
学生党员的自我评价范文
2014/03/01 职场文书
大学运动会加油稿
2015/07/22 职场文书
2016形势与政策学习心得体会
2016/01/12 职场文书
canvas多重阴影发光效果实现
2021/04/20 Javascript
纯html+css实现打字效果
2021/08/02 HTML / CSS
基于HTML十秒做出淘宝页面
2021/10/24 HTML / CSS