Maison >développement back-end >Problème PHP >Comment implémenter la file d'attente php

Comment implémenter la file d'attente php

藏色散人
藏色散人original
2020-11-10 09:58:432752parcourir

Comment implémenter la file d'attente en PHP : créez d'abord un nouveau fichier "artisan.php" ; puis exécutez la file d'attente via "php artisan" et enfin entrez dans le client redis et entrez la commande "lpush listname a b c d e f g".

Comment implémenter la file d'attente php

Recommandé : "Tutoriel vidéo PHP"

Le principe de l'implémentation de la file d'attente en PHP (laravel)

Tous ceux qui ont utilisé le framework Laravel savent qu'il est livré avec une fonction de file d'attente. Avant, j'étais confus, PHP n'est qu'un script avec un mécanisme de délai d'attente. Pourquoi pouvons-nous continuer à exécuter la file d’attente ?

Nous créons un nouveau fichier queue.php

<?php
while(true){
  echo 1;
  sleep(1);    
}

puis exécutons php queue.php dans la ligne de commande

Vous constaterez qu'un 1 est affiché toutes les secondes après ; j'attends depuis longtemps, Hé, c'est incroyable, pourquoi php n'expire-t-il pas ?

Oui, il n'expirera pas. Pourquoi ?

R : En fait, les scripts d'exécution PHP n'expireront pas. Les délais d'attente que nous voyons sur les pages Web, tels que 504, sont causés par. Apache Nginx, le délai d'expiration défini dans le fichier de configuration PHP est déterminé. Étant donné que le fichier d'exécution de la ligne de commande PHP n'utilise pas le fichier de configuration PHP, il n'expire pas par défaut.

ps -ef | grep php

Vous constaterez qu'il existe un processus de file d'attente php

Nous avons résolu le problème du timeout php

Jetons un coup d'œil au principe de la file d'attente

Créez un nouveau fichier artisan.php

<?php
$redis = new Redis();
$redis->connect(&#39;127.0.0.1&#39;,6379);
while(1){
        $res = $redis->lpop(&#39;listname&#39;);
        if($res){echo $res."\r\n";}
        sleep(1);
}

Puis file d'attente d'exécution php artisan

Créons une nouvelle fenêtre, entrons dans le client redis et saisissons la commande suivante

lpush listname a b c d e f g

Vous constaterez que la file d'attente artisan php exécutera continuellement redis. Tapez la valeur que je viens de saisir

En fait, la file d'attente de Laravel est basée sur ce principe, mais elle prend non seulement en charge Redis en tant que support, mais peut également utiliser d'autres bases de données supplémentaires

Quelqu'un le veut, j'ai demandé, mon php artisan.php est démarré si je ferme la fenêtre, cela ne servira-t-il pas à rien ? Non, non, non, Linux peut toujours fonctionner en arrière-plan.

Ajoutez simplement un & après la commande, Ou nohup ... $ peut être exécuté en arrière-plan. Bien sûr, vous pouvez également l'ajouter à la tâche planifiée crontab pour son exécution.

nohup php artisan.php &

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn