2012-03-15 91 views
1
if(isset($_GET['actionid']) && isset($_GET['profileid'])) 
{ 
     $actionid = $_GET['actionid']; 
     $profileid = $_GET['profileid']; 
     $res = $database->news_poll($profileid,$actionid); 
     $k = 0; 
     while(!$NROW =$res->fetch_array()) 
     { 
      usleep('50000000'); 
      $res = $database->news_poll($profileid,$actionid); 
     } 
     $action = actiontype_encode($NROW,'0',$json,$encode,$database); 
     $data['action'] = $action; 
     echo json_encode($data); 
} 

這是我的腳本輪詢服務器的新數據。 但工作瀏覽器停止工作只爲我的網站。我想問題是,當一個特定的瀏覽器訂閱新數據時,連接保持打開狀態,因此瀏覽器不會再向同一臺服務器發出請求。請解釋是否有問題。不能實現長輪詢

回答

1

如果您有任何方法可以,我建議您使用NodeJSSocketIO進行長時間輪詢。您的Web服務器需要爲每個連接的用戶保留一個請求,這比Apache/PHP可以處理的時間長得多。

如果這是不可能的,我建議短輪詢,每3秒做一個正常的ajax請求。這並不完美但易於管理。

我最近用more details回答了一個類似的問題。

無論使用何種語言,我強烈建議您不要編寫自己的長輪詢服務器,除非您希望將其作爲您的項目數年。我曾參與過一個項目,該項目使用了一個用C語言編寫的本地長長輪詢服務器,然後用Java重新編寫,而且它不太好用。

+0

我需要實施長時間輪詢。這是非常重要的,真的需要使用長輪詢而不是短輪詢來實現它。請幫助。請指出實施中的實際問題。 – 2012-03-15 14:14:04

0

我發現問題在於Apache一次只能處理一個客戶端發出的多個請求。因此,在後端的長輪詢腳本中請求新數據時,請求會將來自同一瀏覽器的其他請求掛起到同一臺服務器。

爲了克服這個缺點,需要使用node.js或龍捲風。