2013-10-31 82 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個並行請求。通常在腳本終止後自動關閉。通過默認行爲(會話在可鎖定文件中,不需要手動關閉),同一用戶發出兩個同時請求是不可能的 - 後者將被前者阻止並等待其終止。

只要您檢查了有關用戶授權的所有內容,您可以關閉會話。