2013-04-09 114 views
1

我想知道如何實現一些php服務器後臺功能來處理每秒鐘的一些評估(獨立於用戶查看頁面)。php服務器後臺進程

我現在的解決方案是使用每秒運行的cron作業完成的。我想知道是否有其他選擇或可能性。而不是使用的cron

在此先感謝

+4

cronjob是正確的。 – phpisuber01 2013-04-09 14:34:55

+0

雖然每一秒都顯得過度,但每一分鐘都會更實際 - 沒有意識到cron實際上會跑到每一秒 – 2013-04-09 14:38:04

+0

它必須每秒進行一次評估,因爲它需要在預定時間執行計劃操作 – 2013-04-09 14:42:51

回答

0

,我建議你寫一個守護進程,可以用PHP,Python和Node.js的或者您喜歡的語言做到這一點。一旦你寫好了你的腳本,你可以使用upstar

0

將其轉換成一個守護進程。1)用一個while循環寫入你的程序並進入睡眠狀態。

while (1) 
{ 
    if (x == y) { 
    echo "yay!" 
    } 
    sleep(1); 
} 

2)用一個包裝器編寫程序,所以它永遠不會崩潰。

while test 1 
do 
php /usr/local/bin/continual_process.php 
done 

這種方法的問題在於它一直使用CPU週期。如果您將程序編寫爲node.js應用程序,則事件驅動架構和功能可幫助您擴展應用程序(並讓您考慮解決問題的不同思路)。

此外,您必須考慮處理循環需要多長時間。如果你每秒鐘都在調用這個程序,但是它需要2秒鐘才能循環,你正在吃掉你的程序! sleep方法可能不值得。如果循環需要2秒,並且您的登錄號碼爲sleep 1,則每3秒運行一次該過程。

最後,如果你的過程是快速和輕的(1秒循環),考慮使用setInterval

+0

setTimeout在JavaScript引擎中是在c或php中不太可能比睡眠(1)使用更少的CPU週期。 – Evert 2013-04-09 15:14:58

+0

setTimeout的語義與Web瀏覽器中的大致相同:超時參數是執行前等待的最小數量的ms,而不是保證。該命令僅在每個輪詢週期(在節點中)被檢查並因此**非阻塞**而在C和PHP中則爲** BLOCKING **。 – jnovack 2013-04-09 15:27:05

+0

當然,這正是關鍵。阻塞並不意味着它阻塞了CPU,這意味着這個過程告訴內核:我在x時間內沒有做任何事情,之後再給我CPU時間。由於NodeJS實際上可以在睡眠時在後臺執行某些操作,因此相比於CPU使用率肯定爲0的C/PHP,CPU消耗很可能不爲0. – Evert 2013-04-09 15:53:44