Quiero que los datos enviados por mis clientes (por correo) sean colocados en una cola y un script php en mi servidor comprueba primero si la cola está vacía. Si la cola no está vacía, el script procesará todos los datos en la cola uno por uno. ¿Cómo hago esto?PHP ¿Cómo implemento el proceso de cola en php
Respuesta
Eche un vistazo a this.
Utiliza memcached para la persistencia.
Se podría utilizar algo como Zero MQ
Ver Example by Rasmus Lerdorf.
También podría considerar usar Gearman para distribuir la carga.
Aquí es otra gran tutorial para esto:
La otra solución es utilizar Gearman que parecen haber incorporado en PHP (que no era la última vez que jugué con él): http://php.net/manual/en/book.gearman.php
Problema con el enfoque cronjob es que el cronjob puede establecerse en un intervalo de 1 minuto, por lo que hay un retraso de 1 minuto en la ejecución del trabajo; si eso es aceptable, de lo contrario debería usar colas con script de sondeo.
Dado que los DB relacionales (por ejemplo, MySQL) son muy flexibles y los desarrolladores web los entienden bien, se utilizan para muchos tipos de colas de trabajos. Muchas aplicaciones PHP usan esta solución como alternativa cuando el almacenamiento en caché de objetos no está configurado. Es el método de último recurso porque es una forma muy costosa de implementar una cola.
Si debe utilizar MySQL como su cola, uno de los ingenieros de Percona escribió este blog entry para gestionar los posibles puntos débiles.
Si desea la implementación más escalable, le recomiendo ZeroMQ. Sin embargo, no es una extensión PHP predeterminada o particularmente común. Por lo tanto, para un proyecto en el que no controlaría la pila del servidor web: use objetos APC, Memcache o Memcached, y luego vuelva a utilizar una tabla de caché MySQL.
Esto es algo que podría hacer fácilmente con la biblioteca enqueue. En primer lugar, puede elegir entre una variedad de transports, como AMQP, STOMP, Redis, Amazon SQS, Sistema de archivos, etc.
En segundo lugar, es super fácil de usar. Comencemos desde la instalación:
Tienes que instalar la biblioteca enqueue/simple-client
y one of the transports. Suponiendo que elige el sistema de archivos, instale la biblioteca enqueue/fs
.Para resumir:
composer require enqueue/simple-client enqueue/fs
Ahora vamos a ver cómo se puede enviar mensajes desde el script de 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');
el guión 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();
ejecutar tantas consumer.php
procesos como la que mediante el uso de supervisord u otros administradores de procesos, en la computadora local puede ejecutarlo sin ningún libs o paquetes adicionales.
Ese es un ejemplo básico y enqueue tiene muchas otras características que pueden ser útiles. Si está interesado, marque enqueue documentation.
- 1. ¿Cómo crear una cola de correo electrónico en PHP?
- 2. Proceso de fondo de PHP
- 3. perl cola de proceso
- 4. Proceso de ecuaciones matemáticas en php
- 5. ¿PHP optimiza la recursividad de cola?
- 6. ¿Cómo optimizar el uso de la memoria del proceso php?
- 7. ¿Cómo rastrear el script PHP ejecutando un proceso determinado?
- 8. nohup: ejecutar el proceso de PHP en segundo plano
- 9. php ejecutar un proceso en segundo plano
- 10. Cola de trabajos en node.js
- 11. ¿Cómo ver una cola de mensaje de proceso especificada si se conoce el PID del proceso?
- 12. cómo matar el hilo php de fondo?
- 13. PHP: ¿cómo determinar si el navegador admite javascript en PHP?
- 14. ¿Hay un equivalente al Proceso de C#. Comienza en PHP?
- 15. Obtenga ID único de trabajador/subproceso/proceso/solicitud en PHP
- 16. ¿Cómo continuar el proceso después de responder a la solicitud de ajax en PHP?
- 17. Para expertos en PHP: ¿Cómo dominar PHP?
- 18. ¿Cómo implemento el almacenamiento en caché asincrónico?
- 19. PHP exec() como proceso en segundo plano (Windows Wampserver Environment)
- 20. MSMQ: ¿puede una cola sobrevivir a un proceso de cola reiniciar/reiniciar el servidor
- 21. Cómo configurar Beanstalkd con PHP
- 22. Cómo detener PHP desde el registro PHP Aviso errores
- 23. Cómo hacer que el script php ejecute otro script php
- 24. proceso de fondo php usando la función exec
- 25. ¿Cómo evitar bloqueos de archivos cuando se bloquea el proceso/servidor de PHP?
- 26. cómo funciona el autocargador php
- 27. comunicación entre procesos dentro de PHP con un proceso continuo?
- 28. ¿Cómo implemento `cat` en Haskell?
- 29. ¿Cómo implemento la terminación elegante en Java?
- 30. ¿Cómo crear archivos .php usando php?
Crear una tabla en una base de datos para enviar datos, y luego ejecutar trabajos crontab ever x para recogerlo? – BugFinder
Sí. Me gusta este enfoque. Pero después de insertar la tarea en la tabla, ¿cómo recupero la tarea y actualizo la tabla cuando la tarea se completa? – ASHUTOSH
Ese fue el punto del cronjob para ejecutar una tarea para procesar, acceder a la base de datos y actualizarla – BugFinder