You should to set complete callback before adding tasks.
$client->setCompleteCallback("complete");
$client->addTask("reverse", "Hello!", null, "1");
$client->addTask("reverse", "Hello!", null, "2");
题
It's seems that setCompleteCallback not working at me. What i'm doing wrong? Thanks.
<?php
# Create our client object.
$client = new GearmanClient();
# Add default server (localhost).
$client->addServer("127.0.0.1", 4730);
echo "Sending job\n";
$client->addTask("reverse", "Hello!", null, "1");
$client->addTask("reverse", "Hello!", null, "2");
$client->setCompleteCallback("complete");
$client->runTasks();
function complete($task)
{
print "Выполнено: " . $task->unique() . ", " . $task->data() . "\n";
}
?>
EDIT:
<?php
$worker = new GearmanWorker();
$worker->addServer("127.0.0.1", 4730);
$worker->addFunction("reverse", "reverse_fn");
while (1) {
$ret = $worker->work();
if ($worker->returnCode() != GEARMAN_SUCCESS)
break;
}
function reverse_fn($job)
{
$workload = $job->workload();
sleep(5);
$result = strrev($workload);
$job->sendComplete($result);
return $result;
}
?>
This is my worker. Still not works. Maybe i need something else?
解决方案
You should to set complete callback before adding tasks.
$client->setCompleteCallback("complete");
$client->addTask("reverse", "Hello!", null, "1");
$client->addTask("reverse", "Hello!", null, "2");
其他提示
You have to send complete status in your worker script. GearmanJob::sendComplete.