2012-04-01 69 views
1

我實現心跳爲以下龍拉PHP和AJAX - 服務器性能

$.ajax({ 
    cache:false, 
    timeout:8000, 
    type:"POST", 
    url:"someurl.php", 
    data:allFormValues, 
    error:function(){ alert("some error occurred") }, 
    success:function(response){ //call some functions } 
    }); 

,並在服務器端

$time = time(); 
     while(!proccessServer() && (time() - $time) < 60) 
     { 
      sleep(5); 
     } 

,只是它調用的函數返回false循環會睡更多5秒,然後檢查 但問題是這個東西是吃我的資源CPU ,這是隻有當5個用戶測試它

我在這之前

window.setInterval(function(){ 
    //I call a function here 
}, 5000); 

使用,但也有人在同一時間 吃,因爲很多要求

,也許我的應用程序的資源100K網上也我不考慮使用,因爲瀏覽器的WebSockets兼容性 你有什麼建議來解決這個問題? 任何幫助表示讚賞

回答

2

您的Web服務器(Apache?)將使用一個線程,直到請求完成,這會消耗資源。而且您正在爲每個訪問者使用PHP過程,只是在等待。 PHP不太適合這種解決方案。如果你想做彗星,你應該看看其他技術。例如node.js.

您也可以切換到NGiNX作爲網絡服務器,並使用http://pushmodule.slact.net/的NGiNX_HTTP_Push_Module爲您的應用程序,然後使用PHP。然後NGiNX將接受來自您的訪問者的連接,然後等待您的代碼將數據推送到NGiNX。它可能適用於你,取決於你想要做什麼。

1

這裏的問題是,你讓服務器睡眠和重試。這本身就是資源密集型的。明智地使用它。

你應該做的是以更長的間隔輪詢服務器,並讓服務器回覆狀態,如「完成」或「失敗」。之後,讓JS確定答覆並重試 - 而不是PHP。


或者,你可以使用新的HTML5 sockets讓你有從客戶端到服務器的持久雙向連接。服務器可以將新內容推送到客戶端,而無需客戶端每次都詢問它。