基于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 相关文章推荐
Windows下PHP5和Apache的安装与配置
Sep 05 PHP
PHP中一个控制字符串输出的函数
Oct 09 PHP
PHP下编码转换函数mb_convert_encoding与iconv的使用说明
Dec 16 PHP
php 仿Comsenz安装效果代码打包提供下载
May 09 PHP
php 面向对象的一个例子
Apr 12 PHP
PHP系列学习之日期函数使用介绍
Aug 18 PHP
基于PHP magic_quotes_gpc的使用方法详解
Jun 24 PHP
PHP获取php,mysql,apche的版本信息示例代码
Jan 16 PHP
php实现加减法验证码代码
Feb 14 PHP
php打印输出棋盘的实现方法
Dec 23 PHP
PHP实现找出有序数组中绝对值最小的数算法分析
Aug 07 PHP
PHP实现的支付宝支付功能示例
Mar 26 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日历制作代码分享
2014/01/20 PHP
php数组添加与删除单元的常用函数实例分析
2015/02/16 PHP
WordPress中对访客评论功能的一些优化方法
2015/11/24 PHP
JavaScript监测ActiveX控件是否已经安装过的代码
2008/09/02 Javascript
Fixie.js 自动填充内容的插件
2012/06/28 Javascript
jQuery遍历Form示例代码
2013/09/03 Javascript
JavaScript中setInterval的用法总结
2013/11/20 Javascript
ExtJS中设置下拉列表框不可编辑的方法
2014/05/07 Javascript
JavaScript中跨域调用Flash的方法
2014/08/11 Javascript
浏览器缩放检测的js代码
2014/09/28 Javascript
JavaScript必知必会(五) eval 的使用
2016/06/08 Javascript
微信小程序 同步请求授权的详解
2017/08/04 Javascript
随机生成10个不重复的0-100的数字(实例讲解)
2017/08/16 Javascript
React Native验证码倒计时工具类分享
2017/10/24 Javascript
纯JS实现可用于页码更换的飞页特效示例
2018/05/21 Javascript
electron制作仿制qq聊天界面的示例代码
2018/11/26 Javascript
js实现延迟加载的几种方法详解
2019/01/19 Javascript
解决Vue打包后访问图片/图标不显示的问题
2019/07/25 Javascript
Vue3.0 响应式系统源码逐行分析讲解
2019/10/14 Javascript
微信小程序返回上一级页面的实现代码
2020/06/19 Javascript
解决vue项目运行提示Warnings while compiling.警告的问题
2020/09/18 Javascript
vue3自定义dialog、modal组件的方法
2021/01/04 Vue.js
Python写的Discuz7.2版faq.php注入漏洞工具
2014/08/06 Python
Python 3.6 性能测试框架Locust安装及使用方法(详解)
2017/10/11 Python
使用NumPy和pandas对CSV文件进行写操作的实例
2018/06/14 Python
python TKinter获取文本框内容的方法
2018/10/11 Python
Python动态语言与鸭子类型详解
2019/07/01 Python
python实现简易版学生成绩管理系统
2020/06/22 Python
Python接收手机短信的代码整理
2020/08/02 Python
Django模板报TemplateDoesNotExist异常(亲测可行)
2020/12/18 Python
旅游管理实习自我鉴定
2013/09/29 职场文书
安卓程序员求职信
2014/02/28 职场文书
学习退步检讨书
2014/09/28 职场文书
学校师德师风自我剖析材料
2014/09/29 职场文书
党的群众路线教育实践活动个人对照检查材料(公安)
2014/11/05 职场文书
《女娲补天》教学反思
2016/02/20 职场文书