我希望我的客戶端(通過post)發送的數據放入隊列中,並且我的服務器上的php腳本首先檢查隊列是否爲空。如果隊列不是空的,那麼腳本應該逐個處理隊列中的所有數據。我該怎麼做?PHP我如何在php中實現隊列處理
回答
看看this。
它使用memcached進行持久化。
下面是該另一個偉大的教程:
另一種解決方案是使用Gearman的他們似乎已經納入到PHP(這不是我最後一次發揮它):http://php.net/manual/en/book.gearman.php
cronjob方法的問題是,cronjob最多可以設置爲1分鐘的間隔,所以在作業執行時會有1分鐘的延遲,如果這是可以接受的,那很好,否則應該使用輪詢腳本使用隊列。
由於關係數據庫(例如:MySQL)非常靈活,並且被Web開發人員理解,所以它們被用於許多類型的作業隊列。當對象緩存未配置時,許多PHP應用程序將此解決方案用作回退。這是最後的方法,因爲這是實現隊列的非常昂貴的方式。
如果您必須使用MySQL作爲您的隊列,Percona的工程師之一編寫了這個blog entry來管理潛在的痛點。
如果你想要最具擴展性的實現,我會強烈推薦ZeroMQ。但它不是默認的,或者特別常見的PHP擴展。因此,對於一個不會控制Web服務器堆棧的項目:使用APC對象,Memcache或Memcached,然後回退到MySQL緩存表。
這是你可以輕鬆地用enqueue圖書館做的事情。首先,您可以從各種transports中進行選擇,例如AMQP,STOMP,Redis,Amazon SQS,Filesystem等。其次,這是超級簡單易用的。我們從安裝開始:
您必須安裝enqueue/simple-client
庫和one of the transports。假定您選擇文件系統,請安裝enqueue/fs
庫。總結:
composer require enqueue/simple-client enqueue/fs
現在讓我們看看如何從您的文章腳本發送消息:
<?php
// producer.php
use Enqueue\SimpleClient\SimpleClient;
include __DIR__.'/vendor/autoload.php';
$client = new SimpleClient('file://'); // the queue will store messages in tmp folder
$client->sendEvent('a_topic', 'aMessageData');
消費腳本:
<?php
// consumer.php
use Enqueue\SimpleClient\SimpleClient;
use Enqueue\Psr\PsrProcessor;
use Enqueue\Psr\PsrMessage;
include __DIR__.'/vendor/autoload.php';
$client = new SimpleClient('file://');
$client->bind('a_topic', 'a_processor_name', function(PsrMessage $psrMessage) {
// processing logic here
return PsrProcessor::ACK;
});
// this call is optional but it worth to mention it.
// it configures a broker, for example it can create queues and excanges on RabbitMQ side.
$client->setupBroker();
$client->consume();
運行儘可能多的consumer.php
過程,你使用supervisord或其他進程管理器,您可以在本地計算機上運行它,而無需任何額外的庫或包。
這是一個基本的例子,排隊有很多其他功能可能派上用場。如果您有興趣,請查看enqueue documentation。
- 1. PHP隊列實現
- 2. PHP優先隊列實現
- 3. 使用PHP實現隊列
- 4. PHP AMQP延遲隊列的實現
- 5. 如何在PHP中實現
- 6. python隊列和多處理隊列:他們如何表現?
- 7. 如何爲批處理/隊列例程實現取消按鈕?
- 8. 如何實現工作線程處理URL的隊列
- 9. 如何在android中處理隊列? java
- 10. 如何在javaBeans中實現隊列
- 11. 如何在Java中實現隊列?
- 12. 如何在java中實現隊列?
- 13. 如何在Go中實現隊列?
- 14. 如何處理隊列?
- 15. 如何優先使用循環隊列在C++中實現隊列實現?
- 16. 如何使用NServiceBus在AWS中實現消息隊列和處理
- 17. 如何在MySQL中使用php隊列
- 18. 在java中實現隊列
- 19. 在VB6中實現隊列
- 20. 在c中實現隊列#
- 21. 如何處理DOM在PHP
- 22. 如何在php中創建隊列來管理請求?
- 23. 如何實現在PHP
- 24. 如何實現MVC在PHP
- 25. 如何在Grails中實現批處理
- 26. 如何在Processing中實現DRAWING處理?
- 27. 如何實現通用PHP異常處理程序
- 28. 在PHP中處理
- 29. 如何實現串行網絡調用,那麼在RxSwift處理隊列?
- 30. 隊列實現
在數據庫中創建一個表來提交數據,然後運行crontab作業x來檢索它? – BugFinder 2012-07-06 06:50:51
是的。我喜歡這種方法。但是在將任務插入表中後,如何檢索要完成的任務並在任務完成時更新表? – ASHUTOSH 2012-07-06 10:20:30
這是cronjob運行任務來處理,訪問數據庫並更新它的要點 – BugFinder 2012-07-06 10:40:22