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 ($x0$x $workload_size$x++)
  {
    echo 
"Envoi du statut : " . ($x 1) . "/$workload_size complete\n";
    
$job->sendStatus($x$workload_size);
    
sleep(1);
  }

  
$resultstrrev($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 !