基于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学习教程之第2天
Jun 15 PHP
火车头discuz6.1 完美采集的php接口文件
Sep 13 PHP
如何使用PHP实现javascript的escape和unescape函数
Jun 29 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
Apr 17 PHP
php生成4位数字验证码的实现代码
Nov 23 PHP
浅析Yii2中GridView常见操作
Apr 22 PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
Oct 08 PHP
记录一次排查PHP脚本执行卡住的问题
Dec 27 PHP
PHP实现字符串的全排列详解
Apr 24 PHP
PHP实现单例模式建立数据库连接的方法分析
Feb 11 PHP
php7 参数、整形及字符串处理机制修改实例分析
May 25 PHP
浅谈如何提高PHP代码质量之端到端集成测试
May 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
php中mail函数发送邮件失败的解决方法
2014/12/24 PHP
smarty内置函数foreach用法实例
2015/01/22 PHP
PHPMailer发送邮件
2016/12/28 PHP
[原创]PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】
2017/09/02 PHP
ext jquery 简单比较
2010/04/07 Javascript
js性能优化 如何更快速加载你的JavaScript页面
2012/03/17 Javascript
基于jQuery的弹出框插件
2012/03/18 Javascript
JavaScript中的继承方式详解
2015/02/11 Javascript
详解JavaScript操作HTML DOM的基本方式
2015/10/21 Javascript
AngularJS动态生成div的ID源码解析
2016/08/29 Javascript
浅析JavaScriptSerializer类的序列化与反序列化
2016/11/22 Javascript
Vuex 在Vue 组件中获得Vuex 状态state的方法
2018/08/27 Javascript
微信小程序文字显示换行问题
2019/07/28 Javascript
vue2.0+SVG实现音乐播放圆形进度条组件
2019/09/21 Javascript
在NodeJs中使用node-schedule增加定时器任务的方法
2020/06/08 NodeJs
Vue实现购物车基本功能
2020/11/08 Javascript
让Vue响应Map或Set的变化操作
2020/11/11 Javascript
vue中activated的用法
2021/01/03 Vue.js
Python获取当前时间的方法
2014/01/14 Python
python检测远程udp端口是否打开的方法
2015/03/14 Python
python调用java模块SmartXLS和jpype修改excel文件的方法
2015/04/28 Python
在Python中使用正则表达式的方法
2015/08/13 Python
python 异常处理总结
2016/10/18 Python
Python sqlite3事务处理方法实例分析
2017/06/19 Python
Python竟能画这么漂亮的花,帅呆了(代码分享)
2017/11/15 Python
Python爬虫信息输入及页面的切换方法
2018/05/11 Python
Django框架模板文件使用及模板文件加载顺序分析
2019/05/23 Python
基于python的socket实现单机五子棋到双人对战
2020/03/24 Python
获取django框架orm query执行的sql语句实现方法分析
2019/06/20 Python
如何基于Python实现自动扫雷
2020/01/06 Python
网页美工求职信范文
2014/04/17 职场文书
2014预备党员批评与自我批评思想汇报
2014/09/20 职场文书
导游词之南京夫子庙
2019/12/09 职场文书
Go各时间字符串使用解析
2021/04/02 Golang
python基础学习之生成器与文件系统知识总结
2021/05/25 Python
python入门学习关于for else的特殊特性讲解
2021/11/20 Python