首先需要解釋的是什麼是守護程序。
守護程序就是在後台一直執行的程序。比如我們啟動的httpd,mysqld等程序都是常駐記憶體內執行的程式。
針對需求進行分析:
需求:有乙個常駐佇列messagequeue(假設在redis記憶體中),這個佇列會有可能有請求不定期的往佇列中增加元素。同時我們要求在佇列中有元素的時候,按照佇列順序將元素pop出來,並進行處理(假設這個處理只是echo 『test');
解決方法:
現在假設已經有了兩個函式
function opopmessagequeue() //獲取佇列最後乙個元素;
function vdealelement($element) 處理元素;
要求寫出乙個守護程式,完成上面的需求。
程式:好了,這個程式很容易想到,可以使用while迴圈來做
複製** **如下:
while(true) }
考慮1 :這個程式如果一直跑的話已經可以滿足上面的需求了.
但是考慮到:1 用php程序跑有可能會由於各種情況(比如執行時間過長),程序掛了,這樣程式就無法自動重連了.
方法:使用cron
我們在定時指令碼中每10分鐘起乙個程序跑這個程式。
然後設定這個程式的執行時間為10分鐘,10分鐘後自動取消,於是**變成
複製** **如下:
while(true)
}$timestart = 0;
function vchecktimelimit()
if(time() - $timestart > 60*10)
}考慮2,可能會有這種需求: 需要有隨時讓指令碼暫停的功能:
於是考慮使用檔案來增加暫停功能
複製** **如下:
while(true)}
function vcheckend()
}考慮3,是否可以改成多執行緒的程式,讓執行的效率更高?
這個只要把cron的10分鐘起乙個程序的限制改成每1分鐘起乙個程序就好了
這樣能保證有10個執行緒在執行程式
但是有乙個基本要求是:opopmessagequeue()是乙個原子操作
本文標題: php程式級守護程序的實現與優化的使用概述
本文位址:
PHP擴充套件程式實現守護程序
一般server程式都是執行在系統後台,這與普通的互動式命令列程式有很大的區別。glibc裡有乙個函式daemon。呼叫此函式,就可使當前程序脫離終端變成乙個守護程序,具體內容參見man daemon。php中暫時沒有此函式,當然如果你有興趣的話,程式設計客棧可以寫乙個php的擴充套件函式來實現。p...
php 守護程序的實現
1 php沒有執行在安全模式,關掉安全模式,即 safe mode off 2 禁用函式列表 disable functions exec,system,shell exec,proc open,popen,一般來說,exec 這些函式為了安全,都會禁用,在php.ini裡面把這些禁用的函式放出來。...
PHP程式守護程序化
php命令列程式實現守護程序化有2種方法 nohup php myprog.php log.txt 這裡就實現了守護程序化。單獨執行 php myprog.php,當按下ctrl c時就會中斷程式執行,會kill當前程序以及子程序。php myprog.php 這樣執行程式雖然也是轉為後台執行,實際...