Certaines tâches prennent trop de temps pour être réalisées de façon interactive par le serveur web. Typiquement, tous les programmes de génération d’imports/exports, d’envois d’email... Mais dans certains cas, il peut aussi être intéressant de rendre la main à l’internaute plus rapidement.
5. COMMENT ? Grand principe
#!/usr/bin/env php
<?php
# uniquement en mode ligne de commande
if( !defined('STDIN') ) {
die ("Only from command line, note web");
}
ini_set ('max_execution_time', 0); // Temps maximum d'exécution illimité
while (true) {
# au boulot, sans d’arrêter
}
#NXWTECH6 - 15 mai 2013 - Normandie Web Xperts
6. COMMENT ? En détail
$start_time = time();
while (true) {
// indentifiant d'activité
$faitquelquechose = false;
$return = $ma_fonction_daemon();
if ($return) {
$faitquelquechose = true;
}
if ((time() - $start_time) > 60*30) { // On tue le daemon toutes les 30 minutes
exit(0); // a la fin du temps on le ferme
}
if (!$faitquelquechose) { // repos du démon
sleep(10); // On n'a rien fait, probablement il n'y aura rien d'autre à faire
prochainement : on économise le serveur
}
}
#NXWTECH6 - 15 mai 2013 - Normandie Web Xperts
7. LANCEMENT
A la main, le ligne de commande :
# /usr/bin/php daemon.php
#NXWTECH6 - 15 mai 2013 - Normandie Web Xperts
8. LANCEMENT
En automatique, avec UPSTART :
# vi /etc/init/phpdaemon.php
start on (net-device-up and local-filesystems and runlevel [2345])
stop on runlevel [016]
respawn # redémarrage automatique
env HOME=/var/www/daemonhome
umask 007
kill timeout 300
pre-start script
end script
exec nice -n 10 su www-data -c '/usr/bin/php /var/www/daemonhome/
daemon.php'
post-start script
exit 1
end script
# service start phpdaemon
#NXWTECH6 - 15 mai 2013 - Normandie Web Xperts
9. CHEZ NOUS ?
21 tâches :
- créations des abonnements / facturations / paiement
- gestion des emailings
- gestion des activations / désactivations des campagnes
- aspirations des profils Facebook
- statistiques
- segmentations
- création d’un cache
- imports
#NXWTECH6 - 15 mai 2013 - Normandie Web Xperts
10. EVOLUTION TECHNO
File d’attente :
Avant : chaque tâche teste à chaque fois s’il y a du boulot
Après : mise en file d’attente et traitée au fur et à mesure
Bénéfices : de requêtes SQL, meilleure gestion des priorités
Parallélisation :
Répartition des tâches, sur plusieurs daemons, sur plusieurs
serveurs. Lancement dynamique en fonction du besoin.
#NXWTECH6 - 15 mai 2013 - Normandie Web Xperts