Клиент не получил статус от работника

Я использую код точно так же, как в примере № 2 из http://php.net/manual/en/gearmanclient.donormal.php

Я получаю ожидаемый рабочий вывод, как в руководстве

Проблема в том, что мой клиент не выдал ожидаемый результат, как в руководстве

Ожидаемый результат клиента:

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

Вместо этого вот что я получил:

Sending job
Success: Hello!!olleH

Насколько я знаю, работник работал как положено, он действительно отправлял данные клиенту, поэтому я получаю Sucess: Hello!!olleH вместо просто !olleHИнтересно, почему опрос статуса не работает?

После некоторой отладки я выясняю, что do..while блок запускается только один раз
$gmclient->returnCode() вернуть 0
Похоже, мой клиент не получил статус от работника

Некоторая информация:
ОС: Ubuntu 14.04 (бродяга)
версия редуктора: 1.1.12
версия расширения: 1.1.2
версия libgearman: 1.1.12

Я новичок в gearman, я хочу достичь того же результата, что и в руководстве, любая помощь очень ценится

2

Решение

Я предполагаю, что документация либо устарела, либо неверна. Я немного покопался, и в 0.21 было внесено изменение в функцию Gearman :: do (), которая заставляет ее работать до завершения или до ошибки. Увидеть http://gearman.info/libgearman/gearman_client_do.html.

Изменено в версии 0.21: GEARMAN_PAUSE больше не будет возвращаться. Операция do теперь будет выполняться до завершения или до ошибки.

Вместо этого я думаю, что предпочтительнее делать то, что вы собираетесь, с помощью Задачи и некоторых обратных вызовов:

<?php

# Client code

# Create our client object.
$gmclient= new GearmanClient();

# Add default server (localhost).
$gmclient->addServer();

echo "Sending job\n";

# Send reverse job
$gmclient->setCompleteCallback('gm_complete');
$gmclient->setDataCallback('gm_data');
$gmclient->setStatusCallback('gm_status');
$gmclient->addTask("reverse", "Hello!");
$gmclient->runTasks();

function gm_data(GearmanTask $task) {
echo "Data: {$task->data()}".PHP_EOL;
}

function gm_complete(GearmanTask $task) {
echo "Success: {$task->data()}".PHP_EOL;
}

function gm_status(GearmanTask $task) {
echo "Status: {$task->taskNumerator()} / {$task->taskDenominator()}".PHP_EOL;
}

?>
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]