2013-10-31 49 views
0

您好我正在努力实现与PHP和jQuery的彗星。每个页面加载都会启动彗星。然而,它导致加载网站中的任何页面变得非常缓慢,如10秒钟,它似乎等待先前的请求到服务器die()在if($ elapse> 10) 但如果ajax连接连接是中止,是不是PHP应该停止执行furher?任何想法为什么重新加载页面变得缓慢?PHP Comet导致页面重新加载缓慢

function getPendingCheckin() 
    { 
     ignore_user_abort(false); 
     $iCreatedDate = $this->input->post("iLastCreateDate"); 

     $aCheckin = []; 
     $prev = time(); 
     while(! $aCheckin) 
     { 
      $aCheckin = $this->getData(); 

      if($aCheckin || connection_aborted() == 1) 
      { 
       break; 
      } 
      else 
      { 
       sleep(1); 
       $elapse = time() - $prev; 
       if($elapse > 10) 
       { 
        die(); 
       } 
      } 
     } 

     header('Content-type: application/json'); 
     echo json_encode($aCheckin); 
    } 

的Javascript

 $(window).ready(function(){ 
      var iLastCreateDate = $('#iLastCreateDate').val(); 

      function startGetPendingCheckin() 
      { 
        $.ajax({ 
         type: "POST", 
         url: "/kc/comet/getPendingCheckin", 
         data: 'iLastCreateDate=' + iLastCreateDate, 
         error : function(msg) 
         { 
          //alert("Error get pending checkin"); 
         }, 
         success :function(o) 
         { 
          if(o) 
          { 
           //process data 
          } 

          startGetPendingCheckin(); 
         } 
        }); 
      } 

      startGetPendingCheckin(); 
     }) 

回答

0

没有,PHP执行不(总是)中止。我注意到在本地机器上运行繁重的脚本。

由于未关闭会话,您可能无法对php脚本运行2个并行请求。通常在脚本终止后自动关闭。通过默认行为(会话在可锁定文件中,不需要手动关闭),同一用户发出两个同时请求是不可能的 - 后者将被前者阻止并等待其终止。

只要您检查了有关用户授权的所有内容,您可以关闭会话。