Maison  >  Article  >  développement back-end  >  Comment gérer des tâches fastidieuses en php

Comment gérer des tâches fastidieuses en php

(*-*)浩
(*-*)浩original
2019-09-30 15:30:453220parcourir

Comment gérer des tâches fastidieuses en php

Lorsque la pression d'accès au serveur est relativement élevée, nous pouvons utiliser l'équilibrage de charge pour répartir la charge sur plusieurs serveurs. Mais il y a des requêtes plus chronophages.

1. Vous devez vous connecter au serveur de messagerie et envoyer un très long email HTML. (Apprentissage recommandé : Tutoriel vidéo PHP)

2. Les images téléchargées par les utilisateurs doivent être recadrées et plusieurs vignettes générées.

3. Les fichiers téléchargés par les utilisateurs doivent être distribués sur plusieurs serveurs.

Nous rencontrons souvent dans nos applications quotidiennes que l'utilisateur doit attendre un certain temps avant que la demande puisse être complétée. Lorsque l'utilisateur télécharge une photo, une fois la photo téléchargée avec succès, elle est ensuite recadrée et. Enfin, une vignette est générée. Au cours du processus, l'utilisateur ne peut qu'attendre, donc l'expérience utilisateur est assez mauvaise.

Peut-être qu'après que l'utilisateur l'utilisera pour la première fois, il lui sera difficile d'utiliser cette fonction de téléchargement d'images la prochaine fois.

Alors, existe-t-il un moyen d'exécuter ces processus lentement en arrière-plan ?

La réponse est oui. Grâce au traitement distribué, ces tâches chronophages peuvent être placées en arrière-plan, ou même distribuées sur plusieurs serveurs pour le traitement. Le traitement asynchrone s'avère pratique pour ce problème.

Il existe désormais de nombreux logiciels open source capables de réaliser une communication asynchrone, tels que ActiveMQ, Hadoop, Gearman et MecacheMQ, etc. Ils transfèrent intelligemment les calculs vers d'autres serveurs, et tout cela est caché dans l'API. en même temps, ces mécanismes sont multilingues. Vous pouvez utiliser PHP pour attribuer une tâche, puis la traiter dans le programme C/C++ en arrière-plan.

Ce qui suit utilise php et Gearman pour démontrer le processus de traitement asynchrone.

1 Installation de Gearman

tar zxvf gearmand-0.11.tar.gz
cd  gearmand-0.11
./configure --prefix=/usr/local/gearman
make
make install

2. Extension PHP Gearman.

 tar zxf gearman-0.6.0.tgz
cd gearman-0.6.0
  phpize
  ./configure
  make

Copiez gearman.so dans le répertoire du module dans le répertoire du module de php. Le répertoire de ma machine est /usr/lib/php5/20060613+lfs/.

cp module/gearman.so /usr/lib/php5/20060613+lfs/.

Puis ajoutez

extension = “gearman.so”

à php.ini et enfin redémarrez le serveur Apache.

3. Démarrez le service Gearman

cd /usr/local/gearman/sbin
./gearman -d -u root

Le port par défaut de Job est 4730, qui peut être démarré par

[root@serv_1 sbin]# netstat -nl | grep 4730
tcp        0      0 :::4730                     :::*                        LISTEN

.

Pass bin/gearman est un outil que nous pouvons utiliser pour découvrir les fonctions de Gearman.

Démarrer Worker :

./gearman -w -f wc -- wc -l &
[1] 2547

Exécuter le client :

./gearman -f wc < /etc/passwd
38

Dans l'exemple ci-dessus, une fonction wc est définie dans le Worker. Sa fonction principale est de compter le nombre de lignes de texte. Le client transmet le contenu du fichier /etc/passwd. au Worker pour traitement. Enfin, il est conclu que passwd contient 38 lignes de texte.

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