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

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

  $result= strrev($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

LoadingChargement en cours