Exemple #1 Client et agent Gearman simple, en arrière-plan
<?php # Crée un objet client $gmclient= new GearmanClient(); # Ajoute un serveur par défaut (localhost) $gmclient->addServer(); # Exécute le client en arrière-plan $job_handle = $gmclient->doBackground("reverse", "this is a test"); if ($gmclient->returnCode() != GEARMAN_SUCCESS) { echo "Mauvais code retour\n"; exit; } echo "fait !\n"; ?>
<?php echo "Début\n"; # Crée un nouvel agent $gmworker= new GearmanWorker(); # Ajoute un serveur par défaut (localhost). $gmworker->addServer(); # Enregistre la fonction "reverse" sur le serveur. Modifie la fonction de l'agent en # "reverse_fn_fast" pour une exécution plus rapide sans affichage. $gmworker->addFunction("reverse", "reverse_fn"); print "Attente d'un travail...\n"; while($gmworker->work()) { if ($gmworker->returnCode() != GEARMAN_SUCCESS) { echo "return_code : " . $gmworker->returnCode() . "\n"; break; } } function reverse_fn($job) { echo "Travail reçu : " . $job->handle() . "\n"; $workload = $job->workload(); $workload_size = $job->workloadSize(); echo "Charge de l'agent : $workload ($workload_size)\n"; # Cette boucle n'est pas nécessaire, mais nous l'utilisons pour en comprendre le fonctionnement for ($x= 0; $x < $workload_size; $x++) { echo "Envoi du statut : " . ($x + 1) . "/$workload_size complete\n"; $job->sendStatus($x, $workload_size); sleep(1); } $result= strrev($workload); echo "Résultat : $result\n"; # Retourne ce que l'on veut au client. return $result; } # Une version plus simple et moins vebeuse de la fonction ci-dessus serait : function reverse_fn_fast($job) { return strrev($job->workload()); } ?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
% php reverse_worker.php Début Attente d'un travail... Travail reçu : H:foo.local:41 Charge de l'agent : this is a test (14) 1/14 complete 2/14 complete 3/14 complete 4/14 complete 5/14 complete 6/14 complete 7/14 complete 8/14 complete 9/14 complete 10/14 complete 11/14 complete 12/14 complete 13/14 complete 14/14 complete Résultat : tset a si siht
% php reverse_client_bg.php Fait !