Exemple #1 Client et agent Gearman simple, en arrière-plan

Cet exemple montre un client et un agent simple. Le client envoie une chaîne de caractères au serveur de travaux en tant que travail d'arrière-plan, et l'agent renverse la chaîne de caractères. Notez que vu l'exécution asynchrone de l'agent, le client n'attend pas la fin et qu'il sort (y compris lorsqu'il ne reçoit pas les résultats).

<?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());
}

?>

Résultat de l'exemple ci-dessus est 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 ! 
To Top