Я использую код точно так же, как в примере № 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, я хочу достичь того же результата, что и в руководстве, любая помощь очень ценится
Я предполагаю, что документация либо устарела, либо неверна. Я немного покопался, и в 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;
}
?>
Других решений пока нет …