doNormal don't work in version php_gearman 0.8.3:
PHP Fatal error: Call to undefined method GearmanClient::doNormal()
But it exist in version 1.1.2.GearmanClient::doNormal
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
GearmanClient::doNormal
Референца за `gearmanclient.donormal.php` со подобрена типографија и навигација.
GearmanClient::doNormal
(Нема достапни информации за верзијата, можеби е само во Git)
GearmanClient::doNormal — Стартирај една задача и врати резултат
= NULL
Стартира една задача и враќа текстуелна репрезентација на резултатот. Зависи од GearmanClient and GearmanWorker да се договори за форматот на резултатот.
Параметри
function- GearmanClient::do()
workload- Регистрирана функција што работникот треба да ја изврши
unique- Серијализирани податоци за обработка
Вратени вредности
Уникатен ID што се користи за идентификување на одредена задача
Примери
Низка што ги претставува резултатите од извршувањето на задачата.
<?php
?><?php
# Client code
echo "Starting\n";
# Create our client object.
$gmclient= new GearmanClient();
# Add default server (localhost).
$gmclient->addServer();
echo "Sending job\n";
$result = $gmclient->doNormal("reverse", "Hello!");
echo "Success: $result\n";
?><?php
echo "Starting\n";
# Create our worker object.
$gmworker= new GearmanWorker();
# Add default server (localhost).
$gmworker->addServer();
# Register function "reverse" with the server. Change the worker function to
# "reverse_fn_fast" for a faster worker with no output.
$gmworker->addFunction("reverse", "reverse_fn");
print "Waiting for job...\n";
while($gmworker->work())
{
if ($gmworker->returnCode() != GEARMAN_SUCCESS)
{
echo "return_code: " . $gmworker->returnCode() . "\n";
break;
}
}
function reverse_fn($job)
{
return strrev($job->workload());
}
?>Горниот пример ќе прикаже нешто слично на:
Starting Sending job Success: !olleH
Пример #1 Едноставно поднесување на задача со непосредно враќање
Пример #2 Поднесување на задача и добивање на инкрементален статус Стартирај една задача и врати резултат [застарено] Се поднесува задача и скриптата се врти за да добие информации за статусот. Работникот има вештачко задоцнување што резултира со долготрајна задача и испраќа статус и податоци додека се одвива обработката. Секое последователно повикување на
<?php
# Client code
# Create our client object.
$gmclient= new GearmanClient();
# Add default server (localhost).
$gmclient->addServer();
echo "Sending job\n";
# Send reverse job
do
{
$result = $gmclient->doNormal("reverse", "Hello!");
# Check for various return packets and errors.
switch($gmclient->returnCode())
{
case GEARMAN_WORK_DATA:
echo "Data: $result\n";
break;
case GEARMAN_WORK_STATUS:
list($numerator, $denominator)= $gmclient->doStatus();
echo "Status: $numerator/$denominator complete\n";
break;
case GEARMAN_WORK_FAIL:
echo "Failed\n";
exit;
case GEARMAN_SUCCESS:
break;
default:
echo "RET: " . $gmclient->returnCode() . "\n";
echo "Error: " . $gmclient->error() . "\n";
echo "Errno: " . $gmclient->getErrno() . "\n";
exit;
}
}
while($gmclient->returnCode() != GEARMAN_SUCCESS);
echo "Success: $result\n";
?><?php
# Worker code
echo "Starting\n";
# Create our worker object.
$gmworker= new GearmanWorker();
# Add default server (localhost).
$gmworker->addServer();
# Register function "reverse" with the server.
$gmworker->addFunction("reverse", "reverse_fn");
print "Waiting for job...\n";
while($gmworker->work())
{
if ($gmworker->returnCode() != GEARMAN_SUCCESS)
{
echo "return_code: " . $gmworker->returnCode() . "\n";
break;
}
}
function reverse_fn($job)
{
echo "Received job: " . $job->handle() . "\n";
$workload = $job->workload();
$workload_size = $job->workloadSize();
echo "Workload: $workload ($workload_size)\n";
# This status loop is not needed, just showing how it works
for ($x= 0; $x < $workload_size; $x++)
{
echo "Sending status: " + $x + 1 . "/$workload_size complete\n";
$job->sendStatus($x+1, $workload_size);
$job->sendData(substr($workload, $x, 1));
sleep(1);
}
$result= strrev($workload);
echo "Result: $result\n";
# Return what we want to send back to the client.
return $result;
}
?>Горниот пример ќе прикаже нешто слично на:
произведува информации за статусот на тековната задача.
Starting Waiting for job... Received job: H:foo.local:106 Workload: Hello! (6) 1/6 complete 2/6 complete 3/6 complete 4/6 complete 5/6 complete 6/6 complete Result: !olleH
Излез на работникот:
Starting Sending job Status: 1/6 complete Data: H Status: 2/6 complete Data: e Status: 3/6 complete Data: l Status: 4/6 complete Data: l Status: 5/6 complete Data: o Status: 6/6 complete Data: ! Success: !olleH
Види Исто така
- Излез на клиентот: GearmanClient::doHigh()
- - Изврши една задача со висок приоритет GearmanClient::doLow()
- - Изврши една задача со низок приоритет GearmanClient::doBackground()
- - Изврши задача во позадина GearmanClient::doHighBackground()
- GearmanClient::doNormal() - Стартувај задача со низок приоритет во позадина
Белешки од корисници 2 забелешки
do() or doNormal() will block until the job is accepted by the worker. Looping is only necessary if you care about the response from the job. Use setTimeout() to control how long PHP will block.
If it does timeout, it throws a PHP Warning:
PHP Warning: GearmanClient::do(): _client_do(GEARMAN_TIMEOUT) occured during gearman_client_run_tasks() -> libgearman/client.cc:174