基于php实现长连接的方法与注意事项的问题

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();

(0)

相关推荐

  • PHP开发注意事项总结

    1.使用内嵌的HTML代码,而不是PHP的echo语句. 因为PHP是一门嵌入式Web编程语言,可以将HTML代码和PHP代码相互嵌入.但是很多程序员担心在HTML代码中过多的使用""嵌入PHP代码会多次调用PHP解释器,从而降低了PHP代码的运行速度,所以宁愿使用PHP的echo语句来输出HTML代码,而不直接使用HTML代码.但事实却恰恰相反.每一个PHP页面只调用一次PHP解释器来解释所有的PHP代码,所以,只在需要时才嵌入PHP代码,而大多数的时候直接使用HTML代码输入结果,

  • ThinkPHP入口文件设置及相关注意事项分析

    本文实例分析了ThinkPHP入口文件设置及相关注意事项.分享给大家供大家参考.具体如下: 复制代码 代码如下: <?php  /*第一层意义:   *定义的是与thinkphp有关的核心框架文件目录路径,它可以通过这一个常量在以后运行的时候都去找这个路径,   *确保在以后运行过程中,绝对不会出现问题的(绝对不会对整个项目运行加载路径产生错误):   *第二层意义:   *做一个操作(放跳墙),是防止用直接访问我们的敏感文件,怎么避免呢,我就可以做一个页面包含整个   *敏感页面,用户的访问必

  • php5.3 注意事项说明

    php5.3新特性1.支持命名空间(namespace)5.3以前 复制代码 代码如下: <?phpclass Zend_Db_Table_Select {//表示当前这个类文件位于Zend/Db/Table下} 5.3 复制代码 代码如下: <?phpnamespace Zend/Db/Tableclass Select {} 2.支持延迟静态绑定5.3以前(__CLASS__获得类名)self::who() 复制代码 代码如下: <?phpclass A {    public st

  • php抽象类使用要点与注意事项分析

    本文实例分析了php抽象类使用要点与注意事项.分享给大家供大家参考.具体分析如下: php抽象类使用要点与注意事项如下: 1.用 abstract 来修饰一个类,那么这个类就是抽象类:抽象类绝对不能被实例化,即$abc = new 抽象类名();会报错. 2.用abstract 来修饰一个方法,那么该方法就是抽象方法: 3.如果类中有一个抽象方法,那么该类就必须定义为抽象类:但反过来,抽象类里并不一定要有抽象方法.另外,抽象类里也可以有普通方法. 4.抽象方法不能有方法体.即abstract f

  • php代码架构的八点注意事项

    本文总结讲述了php代码架构的八点注意事项.分享给大家供大家参考,具体如下: 写代码写了6年多了,看看以前的架构,看看现在的架构.都有一些不足的地方.不管怎么样,都一直在改进.说实话不太喜欢用框架这类东西,基本上所有的框架都大同小异,差不了多少,要用话的,你还要去了解思想,目录结构,文件调用,文件命名,代码规范等,挺浪费时间的.构架能满足很大一部分的要求,满足的人越多性能越差,这也是我不喜欢用架构的一个主要原因.下面说一下,代码架构方面的一些心德. 一.面向对象为主,面向过程为辅 php4是面向

  • php数组合并array_merge()函数使用注意事项

    1.array_merge()合并 例子 $array = array('a'=>'bb'); $array2 = array('b'=>'cc'); $array3 = array_merge($array,$array2); 输出结果为 Array ( [a] => bb [b] => cc ) 上面因为都是数组就没有问题了,假如我们把$array 设置不是数组看看什么情况 $array = 1;//array('a'=>'bb'); $array2 = array('b

  • PHP使用静态方法的几个注意事项

    本文实例介绍了PHP使用静态方法的几个常见注意事项.分享给大家供大家参考.具体方法如下: 1. 即使类中的方法并未用static声明,但其未使用到可改变的类成员变量,在外部仍可用操作符::来调用: 2. 以静态方式(用::操作符)调用的方法中$this的取值是由调用时的上下文决定的!而不是定义他的类!! 例如以下的代码: <?php class TestClass1 { public $normal_v = 'normal_v from TestClass1'; public static $S

  • PHP callback函数使用方法和注意事项

    在PHP中有些诸如 call_user_function() 或 usort() 的函数接受用户自定义的函数作为一个参数.Callback 函数不仅可以是一个简单的函数,它还可以是一个对象的方法,包括静态类的方法. 一个 PHP 函数用函数名字符串来传递.您可以传递任何内建的或者用户自定义的函数,除了 array(), echo(), empty(), eval(), exit(), isset(), list(), print() 和 unset(). 一个对象的方法以数组的形式来传递,数组的

  • 基于PHP编程注意事项的小结

     1.php隐性的三元操作符(?:)优先级问题: 例1: 复制代码 代码如下: $person = $who or $person = "laruence"; //实际上是等同于: $person = empty($who)? "laruence" : $who; 例2 复制代码 代码如下: $arr = array(1=>1,3=>3):      $i = 2;      $a = 'test' . isset($arr[$i]) ? $arr[$i

  • 基于php实现长连接的方法与注意事项的问题

    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缓冲数据

  • PHP使用Redis长连接的方法详解

    本文实例讲述了PHP使用Redis长连接的方法.分享给大家供大家参考,具体如下: php-redis在github上的项目地址:https://github.com/phpredis/phpredis pconnect函数声明 其中time_out表示客户端闲置多少秒后,就断开连接.函数连接成功返回true,失败返回false: pconnect(host, port, time_out, persistent_id, retry_interval) host: string. can be a

  • Java Web项目中使用Socket通信多线程、长连接的方法

    很多时候在javaweb项目中我们需要用到Socket通信来实现功能,在web中使用Socket我们需要建立一个监听程序,在程序启动时,启动socket监听.我们的应用场景是在java项目中,需要外接如一个硬件设备,通过tcp通信,获取设备传上来的数据,并对数据做回应. 先看一下web的监听代码: import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class

  • iOS使用GCDSocketManager实现长连接的方法

    .h文件 #import <Foundation/Foundation.h> #import "GCDAsyncSocket.h" @interface GCDSocketManager : NSObject @property(nonatomic,strong) GCDAsyncSocket *socket; //单例 + (instancetype)sharedSocketManager; //连接 - (void)connectToServer; //断开 - (vo

  • django 数据库连接模块解析及简单长连接改造方法

    工作中纯服务端的项目用到了线程池和django的ORM部分.django 的数据库连接在每一个线程中开启一份,并在查询完毕后自动关闭连接. 线程池处理任务时,正常使用的连接中不会被关闭,但由于数据库端有最长连接时间的限制(默认为8小时),在超时后会发生InterfaceError: (0, '')(连接关闭后使用连接/游标)或Error(2006, 'MySQL server has gone away')(mysql 服务器主动关闭连接)这类错误,所以一般会在每个任务线程中调用django.d

  • PHP扩展模块memcached长连接使用方法分析

    网上广泛流传着一篇文章,讲述php的两个扩展模块memcache和memcached的区别,其中特意强调了memcached与memcached一个很大的区别是memcached模块不支持长连接.以至于后来很多年我都认为memcached是不支持长连接的,其实不然,memcached扩展模块从很早的版本开始就已经支持长连接了.从扩展模块的源码注视中我们就能看到: /* {{{ Memcached::__construct([string persistent_id[, callback on_n

  • Python数据库的连接实现方法与注意事项

    在Python中要连接数据库,首先我们得先安装几个重要的东西,主要有: (1)Python-dev包  (2)setuptools-0.6c11.tar.gz  (3)MySQL-python-1.2.3.tar.gz 下面分别来说说这三个主要的包的安装步骤: (1)Python-dev包         直接yum install python-devel (2)setuptools-0.6c11.tar.gz     在网上下载后,先解压:tar zxf setuptools-0.6c11.

  • PHP长连接实现与使用方法详解

    本文实例讲述了PHP长连接实现与使用方法.分享给大家供大家参考,具体如下: 长连接技术(Long Polling) 在服务器端hold住一个连接, 不立即返回, 直到有数据才返回, 这就是长连接技术的原理 长连接技术的关键在于hold住一个HTTP请求, 直到有新数据时才响应请求, 然后客户端再次自动发起长连接请求. 那怎么样hold住一个请求呢?服务器端的代码可能看起来像这样的 set_time_limit(0); //这句很重要, 不至于运行超时 while (true) { if (has

  • php封装pdo实例以及pdo长连接的优缺点总结

    一.前言 最近需要写脚本来实现崩溃日志的入库,不出所料又是脱离于框架的,那么行吧,咱们只能自己封装数据库相关操作了.博主这里选择了封装pdo操作数据库相关. 二.为什么选择pdo 众所周知的,php在早期的时候是带有mysql扩展的,但是后来由于过于古老缺失了mysql的新特性,因此主键没落. 从php5开始,更建议大家使用mysqli扩展,这个是mysql扩展的增强版,是一个面向对象的MySQL接口,更容易使用.缺点是只能操作mysql,不够强大. 还有就是pdo扩展了,这个是最丰富的的一个扩

  • Python WebSocket长连接心跳与短连接的示例

    安装 pip install websocket-client 先来看一下,长连接调用方式: ws = websocket.WebSocketApp("ws://echo.websocket.org/", on_message = on_message, on_error = on_error, on_close = on_close) ws.on_open = on_open ws.run_forever()  长连接,参数介绍: (1)url: websocket的地址. (2)h

随机推荐