你可以像線程池那樣做。創建一個命令行php腳本來處理接收。它應該由一個shell腳本啓動,該腳本在死亡時自動重啓進程。如果shell腳本已經在運行,則該腳本不應該啓動該進程(使用$ pid.running文件或類似文件)。每隔1-10分鐘就有一次cron運行。這應該很好地處理接收。
我不會讓cron觸發Web請求,除非您的cron出於某種奇怪的原因在另一臺服務器上。
另一種使用這種方式的方法是讓一些後臺進程創建數據,一個網頁用戶在瀏覽網站時自動使用它。報告生成器可能以這種方式工作。公司範圍的報告可供所有用戶使用,但您不希望他們全部生成此數據庫/時間密集型報告。因此,您可以創建一個隊列並逐個處理一個隊列,以刪除重複項。所有用戶都可以在準備好後查看報告。
According to the docs它看起來並不像zend db甚至使用與其他zend_db查詢相同的連接。但當然,找出最好的方法是做一個簡單的測試。
EDIT cron中的多行代表併發性。每條線代表池的工作人員。我不清楚,你不想讓pid作爲標識符,你想通過它作爲參數。
-
-
-
-
- /home/byron/run_queue.sh處理1
-
-
-
-
-
- /home/byron/run_queue.sh Process3
的bash腳本將檢查爲$ process.running文件,如果它發現它退出。
否則:
- 創建$ process.running文件。
- 啓動php進程。阻止/等待直到完成。
- 刪除$ process.running文件。
這允許PHP腳本死亡,但不會導致池釋放工人。
如果隊列爲空,php腳本會立即退出,並由cron的nex調用再次啓動。
後續問題; (道歉,如果這是天真的/明顯的)。你是否建議我 1.編寫一個PHP程序來接收消息; 2.編寫一個shell腳本,查找由PHP腳本創建的$ pid.running文件? 3.如果未找到$ pid.running文件,請啓動PHP腳本,然後退出?; 4.在crontab中有很多行用於啓動shell腳本。其中一些將運行,查看$ pid.running文件並退出,但通過每分鐘運行多次嘗試,您可以確保定期運行/重新運行該程序; 我擁有它嗎,還是我錯過了什麼? – 2009-11-30 21:59:07
我也忘了,你也可以通過查看它的創建日期來設置正在運行的文件的超時時間。你需要讓你的php腳本只處理x個條目並退出,這樣你會知道最長的運行腳本會花多長時間採取。 – 2009-11-30 22:39:04
啊哈,我以爲我錯過了什麼。感謝您抽出寶貴的時間在我的新手細節中解釋這一點! – 2009-12-01 02:00:04