2013-06-18 3 views
0

Кажется, что setCompleteCallback не работает на меня. Что я делаю неправильно? Благодарю.Gearman setCompleteCallback не работает

<?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; 
} 
?> 

Это мой рабочий. Все еще не работает. Может, мне нужно что-то еще?

+0

Прошу показать рабочий сценарий. –

+0

Хорошо, мой рабочий находится в должности – sandra1n

ответ

3

Перед добавлением задач вам необходимо установить полный обратный вызов.

$client->setCompleteCallback("complete"); 
$client->addTask("reverse", "Hello!", null, "1"); 
$client->addTask("reverse", "Hello!", null, "2"); 
+0

Вы экономите мой день! – sandra1n

Смежные вопросы