Desidero che i dati inviati dai miei clienti (tramite post) siano messi in coda e uno script php sul mio server controlli prima se la coda è vuota. Se la coda non è vuota, lo script deve elaborare tutti i dati nella coda uno per uno. Come faccio?PHP Come implementare l'elaborazione della coda in php
risposta
Dai uno sguardo allo this.
Utilizza memcached per la persistenza.
Si potrebbe usare qualcosa come Zero MQ
Vedi Example by Rasmus Lerdorf.
Si può anche considerare l'utilizzo di Gearman per distribuire il carico.
Ecco un altro ottimo tutorial per questo:
L'altra soluzione utilizza Gearman che sembrano aver incorporato in PHP (non era l'ultima volta che ho giocato con lui): http://php.net/manual/en/book.gearman.php
Problema con l'approccio cronjob, cronjob potrebbe al massimo impostare un intervallo di 1 minuto, quindi c'è un ritardo di 1 minuto nell'esecuzione del lavoro, se questo è accettabile allora va bene altrimenti dovrebbero usare le code con lo script di polling.
Poiché i DB relazionali (Es: MySQL) sono così flessibili e ben compresi dagli sviluppatori Web, vengono utilizzati per molti tipi di code di lavoro. Molte applicazioni PHP utilizzano questa soluzione come fallback quando la cache degli oggetti non è configurata. È il metodo di ultima istanza perché è un modo molto costoso per implementare una coda.
Se è necessario utilizzare MySQL come coda, uno degli ingegneri Percona ha scritto questo blog entry sulla gestione dei potenziali punti critici.
Se si desidera l'implementazione più scalabile, consigliamo vivamente ZeroMQ. Tuttavia non è un'estensione PHP predefinita o particolarmente comune. Quindi per un progetto in cui non si controllerebbe lo stack del server Web: utilizzare oggetti APC, Memcache o Memcached e quindi eseguire il fallback su una tabella di cache MySQL.
Questo è qualcosa che si potrebbe facilmente fare con la libreria enqueue. Innanzitutto, è possibile scegliere tra una varietà di transports, ad esempio AMQP, STOMP, Redis, Amazon SQS, Filesystem e così via.
In secondo luogo, è semplicissimo da usare. Iniziamo dall'installazione:
È necessario installare la libreria enqueue/simple-client
e one of the transports. Supponendo di aver scelto il filesystem, installa la libreria enqueue/fs
.Per riassumere:
composer require enqueue/simple-client enqueue/fs
Ora vediamo come è possibile inviare messaggi dal vostro script POST:
<?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');
Lo script di consumo:
<?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();
Esegui come molti consumer.php
processi come voi utilizzando supervisord o altri process manager, sul computer locale è possibile eseguirlo senza librerie o pacchetti aggiuntivi.
Questo è un esempio di base e Enqueue ha un sacco di altre caratteristiche che potrebbero tornare utili. Se sei interessato, controlla lo enqueue documentation.
- 1. (PHP) Come implementare correttamente crypt()
- 2. Come implementare evento ascoltare in PHP
- 3. Implementare l'elenco collegato in php
- 4. Come implementare una richiamata in PHP?
- 5. Come implementare il routing dell'URL in PHP
- 6. Come implementare un decoratore in PHP?
- 7. Come implementare eccezione concatenamento in PHP
- 8. Implementare COMET con PHP
- 9. PHP ssh2_connect() implementare un timeout
- 10. PHP Come implementare più servizi Web simultaneamente?
- 11. Come implementare una lista doppiamente collegata in PHP?
- 12. Come implementare gli eventi inviati dal server in PHP?
- 13. Come implementare correttamente un menu strutturato in php
- 14. Come implementare una maschera di bit in PHP?
- 15. Come implementare il modello del peso mosca in php?
- 16. Come implementare una variabile membro di sola lettura in PHP?
- 17. Come implementare la cache lato server con PHP
- 18. Come iniettare solo alcune parti della pagina PHP utilizzando PHP
- 19. Creazione di una coda di posta elettronica in PHP?
- 20. Panoramica della stenografia PHP
- 21. Cosa impedirebbe l'elaborazione dei lavori in coda? [PHP/Laravel 5]
- 22. Come aggiornare PHP in RAD PHP XE2
- 23. Come verificare il formato della data della stringa in PHP?
- 24. Come implementare oAuth PHP per il feed Atom di Gmail?
- 25. Come implementare una vera web chat veloce con PHP?
- 26. Come implementare metodi di callback all'interno delle classi (PHP)
- 27. Come posso implementare OCR su un sito Web utilizzando PHP?
- 28. Svantaggio della coda circolare?
- 29. Implementazione di una coda semplice con PHP e MySQL?
- 30. Come configurare Beanstalkd con PHP
Creare una tabella in un database per inviare dati e quindi eseguire x lavori di crontab x per raccoglierlo? – BugFinder
Sì. Mi piace questo approccio. Ma dopo aver inserito l'attività nella tabella, come faccio a recuperare l'attività da fare e aggiornare la tabella quando l'attività è stata completata? – ASHUTOSH
Questo era il punto del cronjob per eseguire un'attività da elaborare, accedere al db e aggiornarlo – BugFinder