(Информация о версии неизвестна, возможно, только в SVN)
GearmanClient::doNormal — Выполняет одиночное задание и возвращает результат
$function_name
   , string $workload
   [, string $unique
  ] )Выполняет одиночное задание и возвращает строковое представление результата. Формат возвращаемого результата определяют объекты GearmanClient и GearmanWorker.
function_nameЗарегистрированная функция, вызываемая рабочим процессом
workloadСериализованные данные, подлежащие обработке
uniqueУникальный ID, назначаемый определенной задаче
Строка, представляющая результат выполнения задания.
Пример #1 Выполнение простого задания с возвратом результата
<?php
?>
<?php
# Клиентский код
echo "Запуск\n";
# Создание клиента.
$gmclient= new GearmanClient();
# Добавление сервера по умолчанию (localhost).
$gmclient->addServer();
echo "Отправка задания\n";
$result = $gmclient->doNormal("reverse", "Hello!");
echo "Задание выполнено: $result\n";
?>
<?php
echo "Запуск\n";
# Создание объекта обработчика заданий.
$gmworker= new GearmanWorker();
# Добавление сервера по умолчанию (localhost).
$gmworker->addServer();
# Регистрация функции "reverse" на сервере. Замена обрабатывающей функции
# на "reverse_fn_fast" для быстрой обработки без вывода
$gmworker->addFunction("reverse", "reverse_fn");
print "Ожидание задания...\n";
while($gmworker->work())
{
  if ($gmworker->returnCode() != GEARMAN_SUCCESS)
  {
    echo "Код возврата: " . $gmworker->returnCode() . "\n";
    break;
  }
}
function reverse_fn($job)
{
  return strrev($job->workload());
}
?>
Результатом выполнения данного примера будет что-то подобное:
Запуск Отправка задания Задание выполнено: !olleH
Пример #2 Отправка задания на обработку и мониторинг состояния
После отправки задания скрипт в цикле запрашивает текущий прогресс обработки. В обработчик введена искусственная задержка, чтобы сэмулировать долго выполняющееся задание. Обработчик посылает клиенту свое текущее состояние, как только завершена обработка очередной порции данных. Последовательные вызовы GearmanClient::doNormal() запрашивают текущее состояние выполняющегося задания.
<?php
# Клиентский код
# Создание клиента.
$gmclient= new GearmanClient();
# Добавление сервера по умолчанию (localhost).
$gmclient->addServer();
echo "Отправка задания\n";
# Отправка задания перевернуть строку
do
{
  $result = $gmclient->doNormal("reverse", "Hello!");
  # Проверка состояния на ошибки или возвращаемые данные.
  switch($gmclient->returnCode())
  {
    case GEARMAN_WORK_DATA:
      echo "Данные: $result\n";
      break;
    case GEARMAN_WORK_STATUS:
      list($numerator, $denominator)= $gmclient->doStatus();
      echo "Статус: $numerator/$denominator complete\n";
      break;
    case GEARMAN_WORK_FAIL:
      echo "Провал операции\n";
      exit;
    case GEARMAN_SUCCESS:
      break;
    default:
      echo "Код возврата: " . $gmclient->returnCode() . "\n";
      echo "Ошибка: " . $gmclient->error() . "\n";
      echo "Номер ошибки: " . $gmclient->getErrno() . "\n";
      exit;
  }
}
while($gmclient->returnCode() != GEARMAN_SUCCESS);
echo "Обработка завершена: $result\n";
?>
<?php
# Код обработчика
echo "Запуск\n";
# Создаем свой объект обработчика.
$gmworker= new GearmanWorker();
# Добавление сервера по умолчанию (localhost).
$gmworker->addServer();
# Регистрируем функцию "reverse" на сервере.
$gmworker->addFunction("reverse", "reverse_fn");
print "Ожидание задания...\n";
while($gmworker->work())
{
  if ($gmworker->returnCode() != GEARMAN_SUCCESS)
  {
    echo "Код возврата: " . $gmworker->returnCode() . "\n";
    break;
  }
}
function reverse_fn($job)
{
  echo "Получено задание: " . $job->handle() . "\n";
  $workload = $job->workload();
  $workload_size = $job->workloadSize();
  echo "Загружены данные: $workload ($workload_size)\n";
  # Этот цикл не является необходимым, просто показывает, как все работает
  for ($x= 0; $x < $workload_size; $x++)
  {
    echo "Отправка статуса: " + $x + 1 . "/$workload_size завершено\n";
    $job->sendStatus($x+1, $workload_size);
    $job->sendData(substr($workload, $x, 1));
    sleep(1);
  }
  $result= strrev($workload);
  echo "Результат: $result\n";
  # Возвращаем то, что хотим отправить клиенту
  return $result;
}
?>
Результатом выполнения данного примера будет что-то подобное:
Вывод обработчика:
Запуск Ожидание задания... Получено задание: H:foo.local:106 Загружены данные: Hello! (6) 1/6 завершено 2/6 завершено 3/6 завершено 4/6 завершено 5/6 завершено 6/6 завершено Результат: !olleH
Вывод клиента:
Запуск Отправка задания Состояние: 1/6 завершено Данные: H Состояние: 2/6 завершено Данные: e Состояние: 3/6 завершено Данные: l Состояние: 4/6 завершено Данные: l Состояние: 5/6 завершено Данные: o Состояние: 6/6 завершено Данные: ! Обработка завершена: !olleH