GearmanClient::do

(PECL gearman >= 0.5.0)

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

Description

public function GearmanClient::do(string $function_name, string $workload, string $unique = ?): string

La méthode GearmanClient::do() est obsolète depuis pecl/gearman 1.0.0. Utiliser 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 sérialisé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 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)
{
return
strrev($job->workload());
}

?>

Résultat de l'exemple ci-dessus est 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 qui résulte en un travail de longue durée et envoie le statut et les données au fur et à mesure du traitement. Chaque appel suivant à la méthode GearmanClient::do() produit 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 terminé\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 terminé\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;
}

?>

Résultat de l'exemple ci-dessus est 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 terminé
2/6 terminé
3/6 terminé
4/6 terminé
5/6 terminé
6/6 terminé
Résultat : !olleH

Le client affiche :

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

Voir aussi