基于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 数字左侧自动补0
Mar 31 PHP
php file_exists 检查文件或目录是否存在的函数
May 10 PHP
php中时间轴开发(刚刚、5分钟前、昨天10:23等)
Oct 03 PHP
php分页示例分享
Apr 30 PHP
函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
Jul 02 PHP
php简单定时执行任务的实现方法
Feb 23 PHP
php实现在限定区域里自动调整字体大小的类实例
Apr 02 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
May 27 PHP
微信自定义分享php代码分析
Nov 24 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
Oct 16 PHP
Yii2框架视图(View)操作及Layout的使用方法分析
May 27 PHP
laravel 执行迁移回滚示例
Oct 23 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实现采集程序原理和简单示例代码
2007/03/18 PHP
PHP 采集心得技巧
2009/05/15 PHP
PHP处理excel cvs表格的方法实例介绍
2013/05/13 PHP
24条货真价实的PHP代码优化技巧
2016/07/28 PHP
浅谈PHP中静态方法和非静态方法的相互调用
2016/10/04 PHP
js表数据排序 sort table data
2009/02/18 Javascript
firefox事件处理之自动查找event的函数(用于onclick=foo())
2010/08/05 Javascript
利用jQuery实现可输入搜索文字的下拉框
2013/10/23 Javascript
用javascript读取xml文件读取节点数据
2014/08/12 Javascript
Summernote实现图片上传功能的简单方法
2016/07/11 Javascript
JavaScript判断浏览器及其版本信息
2017/01/20 Javascript
微信小程序 新建登录页并实现tabBar隐藏
2017/06/13 Javascript
关于页面刷新vuex数据消失问题解决方案
2017/07/03 Javascript
基于Bootstrap分页的实例讲解(必看篇)
2017/07/04 Javascript
详解在React里使用&quot;Vuex&quot;
2018/04/02 Javascript
JavaScript设计模式之建造者模式实例教程
2018/07/02 Javascript
Vue框架下引入ActiveX控件的问题解决
2019/03/25 Javascript
通过实例讲解JS如何防抖动
2019/06/15 Javascript
js实现拖动缓动效果
2020/01/13 Javascript
react ant Design手动设置表单的值操作
2020/10/31 Javascript
浅谈JSON5解决了JSON的两大痛点
2020/12/14 Javascript
Node快速切换版本、版本回退(降级)、版本更新(升级)
2021/01/07 Javascript
Python基于whois模块简单识别网站域名及所有者的方法
2018/04/23 Python
PyQt5实现拖放功能
2018/04/25 Python
对Python中9种生成新对象的方法总结
2018/05/23 Python
详解Python网络框架Django和Scrapy安装指南
2019/04/01 Python
python简单实现矩阵的乘,加,转置和逆运算示例
2019/07/10 Python
TFRecord格式存储数据与队列读取实例
2020/01/21 Python
Django用户登录与注册系统的实现示例
2020/06/03 Python
python和php哪个容易学
2020/06/19 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
2021/01/08 Python
We Fashion荷兰:一家国际时装公司
2018/04/18 全球购物
民族团结先进个人事迹材料
2014/06/02 职场文书
中学生运动会口号
2014/06/07 职场文书
歼十出击观后感
2015/06/11 职场文书
2015年中学体育教师工作总结
2015/10/23 职场文书