PHP程式級守護程序的實現與優化的使用概述

2022-10-06 13:21:15 字數 1107 閱讀 2789

首先需要解釋的是什麼是守護程序。

守護程序就是在後台一直執行的程序。比如我們啟動的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 這樣執行程式雖然也是轉為後台執行,實際...