欢迎光临
屌丝博客

php comet长连接

因为HTTP传输机制的限制,一次HTTP请求就完整的包括了TCP建立、TCP传输 和TCP关闭。我们在一个页面被访问完毕之后,这次连接

就完全释放。那么服务器就无法再与这个客户端通信了。

 

由于页面超时时间一般为30秒,服务器也无法抓住一次HTTP请求不放开,所以这个问题一直在WEB开发技术上作为一个热点问题存在。

 

直到AJAX的出现,我们出现了以AJAX为基础的HTTP长连接技术:comet    (可参考google的comet)

var timestamp = 0;
function tongji(){
  var error = false;
  $.ajax({
    type: 'get',
    url:'/test.php',
    data: { 'timestamp' : timestamp },
    dataType:'json',
    timeout: 29000, 
    success:function(data){
      if(data){
        timestamp = data['timestamp'];
        //里面自己发挥
      }
    },
    error: function() {
      error = true;
    },
    complete: function() {
      if (error) {
          setTimeout(function() {
            tongji();
          }, 5000);
      } else {
          setTimeout(function() {
            tongji();
          }, 1000);
      }
    }
  })
}

PHP部分


        $filename = './txt.txt';
        $currentmodif = filemtime($filename);
        $lastmodif    = g('timestamp') ? g('timestamp') : 0;
        
        $tmpi = 0;
        while($currentmodif <= $lastmodif){
             usleep( 50000 );
             ++$tmpi;
             if ( !( 500 < $tmpi ) ){
                 clearstatcache(); //清除缓存信息
                 $currentmodif = filemtime($filename);
                 continue;
             }
             exit();
        }
        $data = array(
                'timestamp'=>$currentmodif
                );
                
        echo json_encode($data);
        flush();