GearmanClient
PHP Manual

GearmanClient::do

(PECL gearman >= 0.5.0)

GearmanClient::doExécute une seule tâche et retourne le résultat (obsolète)

Description

public string GearmanClient::do ( string $function_name , string $workload [, string $unique ] )

La méthode GearmanClient::do() est obsolète depuis pecl/gearman 1.0.0. Utilisez la méthode GearmanClient::doNormal() à la place.

Liste de paramètres

function_name

Une fonction enregistrée que le travailleur va exécuter

workload

Données linéarisées à analyser

unique

Un identifiant unique utilisé pour identifier une tâche particulière

Valeurs de retour

Une représentation sous forme de chaîne de caractères du résultat de l'exécution de la tâche.

Exemples

Exemple #1 Soumission d'une seule tâche avec un retour immédiat

<?php

# Code du client

echo "Début\n";

# Crée un client.
$gmclient= new GearmanClient();

# Ajoute un serveur par défaut (localhost).
$gmclient->addServer();

echo 
"Envoi d'un travail\n";

$result $gmclient->doNormal("reverse""Hello!");

echo 
"Succès : $result\n";

?>
<?php

echo "Début\n";

# Crée un agent.
$gmworker= new GearmanWorker();

# Ajoute un serveur par défaut (localhost).
$gmworker->addServer();

# Enregistre la fonction "reverse" avec le serveur. Modifie la fonction en
# "reverse_fn_fast" pour une exécution plus rapide sans affiche.
$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)
{
  return 
strrev($job->workload());
}

?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Début
Envoi d'un travail
Succès : !olleH

Exemple #2 Soumission d'un travail et récupération incrémentale du statut

Un travail est soumis et le script boucle pour récupérer les informations de statut. L'agent a un délai artificiel pour récupérer les résultats lors d'une exécution longue d'un travail mais aussi l'envoi des statuts et des données. Chaque sous-séquence appèle la méthode GearmanClient::do() permettant de produire des informations de statut sur le travail en cours.

<?php

# Code du client

# Crée un client.
$gmclient= new GearmanClient();

# Ajoute un serveur par défaut (localhost).
$gmclient->addServer();

echo 
"Envoi d'un travail\n";

# Envoi du travail
do
{
  
$result $gmclient->doNormal("reverse""Hello!");
  
# Vérifie les paquets et les erreurs retournés.

  
switch($gmclient->returnCode())
  {
    case 
GEARMAN_WORK_DATA:
      echo 
"Données : $result\n";
      break;
    case 
GEARMAN_WORK_STATUS:
      list(
$numerator$denominator)= $gmclient->doStatus();
      echo 
"Statut : $numerator/$denominator complete\n";
      break;
    case 
GEARMAN_WORK_FAIL:
      echo 
"Échec\n";
      exit;
    case 
GEARMAN_SUCCESS:
      break;
    default:
      echo 
"RET : " $gmclient->returnCode() . "\n";
      echo 
"Erreur : " $gmclient->error() . "\n";
      echo 
"N° de l'erreur : " $gmclient->getErrno() . "\n";
      exit;
  }
}
while(
$gmclient->returnCode() != GEARMAN_SUCCESS);

echo 
"Succès : $result\n";

?>
<?php

# Code de l'agent

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" avec le serveur.
$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 montre le fonctionnement
  
for ($x0$x $workload_size$x++)
  {
    echo 
"Envoi du statut : " $x "/$workload_size complete\n";
    
$job->sendStatus($x+1$workload_size);
    
$job->sendData(substr($workload$x1));
    
sleep(1);
  }

  
$resultstrrev($workload);
  echo 
"Résultat : $result\n";

  
# Nous retournons ce que l'on souhaite au client.
  
return $result;
}

?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

L'agent affiche :

Début
Attente d'un travail...
Travail reçu : H:foo.local:106
Charge de l'agent : Hello! (6)
1/6 complete
2/6 complete
3/6 complete
4/6 complete
5/6 complete
6/6 complete
Résultat : !olleH

Le client affiche :

Début
Envoi d'un travail
Statut : 1/6 complete
Données : H
Statut : 2/6 complete
Données : e
Statut : 3/6 complete
Données : l
Statut : 4/6 complete
Données : l
Statut : 5/6 complete
Données : o
Statut : 6/6 complete
Données : !
Succès : !olleH

Voir aussi


GearmanClient
PHP Manual