基于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 相关文章推荐
IIS下配置Php+Mysql+zend的图文教程
Dec 08 PHP
用mysql内存表来代替php session的类
Feb 01 PHP
php将会员数据导入到ucenter的代码
Jul 18 PHP
Php header()函数语法及使用代码
Nov 04 PHP
ThinkPHP数据操作方法总结
Sep 28 PHP
详解php设置session(过期、失效、有效期)
Nov 12 PHP
WordPress中登陆后关闭登陆页面及设置用户不可见栏目
Dec 31 PHP
curl 出现错误的调试方法(必看)
Feb 13 PHP
关于PHP通用返回值设置方法
Mar 31 PHP
php实现与python进行socket通信的方法示例
Aug 30 PHP
PHP使用PDO调用mssql存储过程的方法示例
Oct 07 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
Nov 17 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
预告映像公开!第1章续篇剧场版动画《Princess Principal Crown Handler》4月10日上映!
2020/03/06 日漫
DC这些乐高系列动画电影你看过几部?
2020/04/09 欧美动漫
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
2007/04/12 PHP
PHP页面间参数传递的四种方法详解
2013/06/09 PHP
PHP实现即时输出、实时输出内容方法
2015/05/27 PHP
Symfony2学习笔记之模板用法详解
2016/03/17 PHP
简介PHP的Yii框架中缓存的一些高级用法
2016/03/29 PHP
showModelessDialog()使用详解
2006/09/07 Javascript
Javascript &amp; DHTML 实例编程(教程)DOM基础和基本API
2007/06/02 Javascript
Ext JS 4官方文档之三 -- 类体系概述与实践
2012/12/16 Javascript
jquery 文本上下无缝滚动,鼠标放上去就停止 小例子
2013/06/05 Javascript
让js弹出窗口居前显示的实现方法
2013/07/10 Javascript
js实现从右向左缓缓浮出网页浮动层广告的方法
2015/05/09 Javascript
轻松学习jQuery插件EasyUI EasyUI创建RSS Feed阅读器
2015/11/30 Javascript
jquery弹出遮掩层效果【附实例代码】
2016/04/28 Javascript
浅谈JavaScript 数据属性和访问器属性
2016/09/01 Javascript
JavaScript随机生成颜色的方法
2016/10/15 Javascript
用Vue.js实现监听属性的变化
2016/11/17 Javascript
Vue原理剖析 实现双向绑定MVVM
2017/05/03 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
webpack将js打包后的map文件详解
2018/02/22 Javascript
JS实现的贪吃蛇游戏完整实例
2019/01/18 Javascript
layui实现把数据表格时间戳转换为时间格式的例子
2019/09/12 Javascript
JS判断数组是否包含某元素实现方法汇总
2020/06/24 Javascript
[03:11]2014DOTA2国际邀请赛-VG掉入败者组 独家专访357
2014/07/19 DOTA
[00:47]DOTA2荣耀之路6:天火,天火!
2018/05/30 DOTA
对Python中实现两个数的值交换的集中方法详解
2019/01/11 Python
python中查看.db文件中表格的名字及表格中的字段操作
2020/07/07 Python
IRO美国官网:法国服装品牌
2018/03/06 全球购物
世界上最具创新性的增强型知名运动品牌:Proviz
2018/04/03 全球购物
护理职业生涯规划书
2014/01/24 职场文书
五好家庭申报材料
2014/12/20 职场文书
学生保证书
2015/01/16 职场文书
骆驼祥子读书笔记
2015/06/26 职场文书
2019假期福利管理制度!
2019/07/15 职场文书
授权协议书范本(3篇)
2019/10/15 职场文书