基于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+MSSQL分页的例子
Oct 09 PHP
模仿OSO的论坛(三)
Oct 09 PHP
php中批量替换文件名的实现代码
Jul 20 PHP
PHP输出当前进程所有变量/常量/模块/函数/类的示例
Nov 07 PHP
php判断电脑访问、手机访问的例子
May 10 PHP
PHP中生成UUID自定义函数分享
Jun 10 PHP
利用“多说”制作留言板、评论系统
Jul 14 PHP
使用PHP编写发红包程序
Jul 22 PHP
PHP实现原生态图片上传封装类方法
Nov 08 PHP
使用一个for循环将N*N的二维数组的所有值置1实现方法
May 29 PHP
php微信开发之音乐回复功能
Jun 14 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
Mar 24 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之Smarty入门
2007/01/04 PHP
php中计算程序运行时间的类代码
2012/11/03 PHP
golang与PHP输出excel示例
2016/07/22 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
关于文本限制字数的js代码
2007/04/02 Javascript
有关于JS构造函数的重载和工厂方法
2013/04/07 Javascript
javascript实现仿IE顶部的可关闭警告条
2015/05/05 Javascript
微信小程序实现倒计时60s获取验证码
2020/04/17 Javascript
JS库 Highlightjs 添加代码行号的实现代码
2017/09/13 Javascript
基于vue+canvas的excel-like组件实例详解
2017/11/28 Javascript
vue项目如何刷新当前页面的方法
2018/05/18 Javascript
vue中tab选项卡的实现思路
2018/11/25 Javascript
用Fundebug插件记录网络请求异常的方法
2019/02/21 Javascript
对TypeScript库进行单元测试的方法
2019/07/18 Javascript
nodejs实现聊天机器人功能
2019/09/19 NodeJs
nodejs中使用archive压缩文件的实现代码
2019/11/26 NodeJs
JS页面动态绘图工具SVG,Canvas,VML介简介
2020/10/16 Javascript
利用Vue实现简易播放器的完整代码
2020/12/30 Vue.js
python实现的各种排序算法代码
2013/03/04 Python
Python中使用动态变量名的方法
2014/05/06 Python
使用Python的判断语句模拟三目运算
2015/04/24 Python
python3实现跳一跳点击跳跃
2018/01/08 Python
关于numpy数组轴的使用详解
2019/12/05 Python
python 多维高斯分布数据生成方式
2019/12/09 Python
Python安装并操作redis实现流程详解
2020/10/13 Python
HTML5实现动画效果的方式汇总
2016/02/29 HTML / CSS
英国领先的维生素和补充剂品牌:Higher Nature
2019/08/26 全球购物
C面试题
2015/10/08 面试题
七一党日活动总结
2014/07/08 职场文书
党员查摆问题及整改措施
2014/10/10 职场文书
2014年安全生产工作总结
2014/11/13 职场文书
2015年社区重阳节活动总结
2015/07/30 职场文书
thinkphp 获取控制器及控制器方法
2021/04/16 PHP
MySQL REVOKE实现删除用户权限
2021/06/18 MySQL
volatile保证可见性及重排序方法
2022/08/05 Java/Android