GearmanClient::do

(PECL gearman >= 0.5.0)

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

Description

publicGearmanClient::do(string$function_name, string$workload, string$unique = ?): string

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

?>

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

?>

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 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

To Top