Наша группа в телеграмм для обмена идеями, проектами, мыслями, людьми в сфере ИТ г.Ростова-на-Дону: @it_rostov

GearmanClient::do

(PECL gearman >= 0.5.0)

GearmanClient::do — Выполняет одну задачу и возвращает результат [Устаревший метод]


Описание

public string GearmanClient::do ( string $function_name , string $workload [, string $unique ] )

Метод GearmanClient::do() устарел начиная с pecl/gearman 1.0.0. Используйте GearmanClient::doNormal().


Список параметров

function_name -

Зарегистрированная функция, вызываемая рабочим процессом

workload -

Сериализованные данные, подлежащие обработке

unique -

Уникальный ID, назначаемый определенной задаче


Возвращаемые значения

Результат выполнения задачи в виде строки.


Примеры

Пример #1 Простое представление задания с непосредственным возвратом
# Код клиента
echo "Starting\n";
# Создание клиента
$gmclient= new GearmanClient();
# Указание сервера по умолчанию (localhost).
$gmclient->addServer();
echo "Sending job\n";
$result = $gmclient->doNormal("reverse", "Hello!");
echo "Success: $result\n";

echo "Starting\n";
# Создание экземпляра обработчика
$gmworker= new GearmanWorker();
# Указание сервера по умолчанию (localhost).
$gmworker->addServer();
# Регистрация функции "reverse" на сервере. Изменение функции обработчика на
# "reverse_fn_fast" для более быстрой обработки без вывода.
$gmworker->addFunction("reverse", "reverse_fn");
print "Waiting for job...\n";
while($gmworker->work())
{
  if ($gmworker->returnCode() != GEARMAN_SUCCESS)
  {
    echo "return_code: " . $gmworker->returnCode() . "\n";
    break;
  }
}
function reverse_fn($job)
{
  return strrev($job->workload());
}

Результатом выполнения данного примера будет что-то подобное:


Starting
Sending job
Success: !olleH

Пример #2 Передача задания и получение инкрементного состояния

Дается задание и задается цикл для получения информации об изменении статуса. У обработчика указана искусственная задержка для моделирования длительного выполнения задания и задана отправка состояния и данных во время обработки. Каждый последующий вызов GearmanClient::do() выводит информацию о статусе выполнения текущего задания.


# Код клиента
# Создание экземпляра клиента Gearman
$gmclient= new GearmanClient();
# Указание сервера по умолчанию (localhost).
$gmclient->addServer();
echo "Sending job\n";
# Отправка задания
do
{
  $result = $gmclient->doNormal("reverse", "Hello!");
  # Проверка на различные возвращаемые форматы и ошибки
  switch($gmclient->returnCode())
  {
    case GEARMAN_WORK_DATA:
      echo "Data: $result\n";
      break;
    case GEARMAN_WORK_STATUS:
      list($numerator, $denominator)= $gmclient->doStatus();
      echo "Status: $numerator/$denominator complete\n";
      break;
    case GEARMAN_WORK_FAIL:
      echo "Failed\n";
      exit;
    case GEARMAN_SUCCESS:
      break;
    default:
      echo "RET: " . $gmclient->returnCode() . "\n";
      echo "Error: " . $gmclient->error() . "\n";
      echo "Errno: " . $gmclient->getErrno() . "\n";
      exit;
  }
}
while($gmclient->returnCode() != GEARMAN_SUCCESS);
echo "Success: $result\n";

# Код обработчика
echo "Starting\n";
# Создание экземпляра обработчика.
$gmworker= new GearmanWorker();
# Указание сервера по умолчанию  (localhost).
$gmworker->addServer();
# Регистрация функции "reverse" на сервере.
$gmworker->addFunction("reverse", "reverse_fn");
print "Waiting for job...\n";
while($gmworker->work())
{
  if ($gmworker->returnCode() != GEARMAN_SUCCESS)
  {
    echo "return_code: " . $gmworker->returnCode() . "\n";
    break;
  }
}
function reverse_fn($job)
{
  echo "Received job: " . $job->handle() . "\n";
  $workload = $job->workload();
  $workload_size = $job->workloadSize();
  echo "Workload: $workload ($workload_size)\n";
  # Данный цикл не является необходимым, только иллюстрирует процесс
  for ($x= 0; $x < $workload_size; $x++)
  {
    echo "Sending status: " + $x + 1 . "/$workload_size complete\n";
    $job->sendStatus($x+1, $workload_size);
    $job->sendData(substr($workload, $x, 1));
    sleep(1);
  }
  $result= strrev($workload);
  echo "Result: $result\n";
  # Возврат результата, отправляемого клиенту
  return $result;
}

Результатом выполнения данного примера будет что-то подобное:


Вывод обработчика:


Starting
Waiting for job...
Received job: H:foo.local:106
Workload: Hello! (6)
1/6 complete
2/6 complete
3/6 complete
4/6 complete
5/6 complete
6/6 complete
Result: !olleH

Вывод клиента:


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


Смотрите также


Описание класса gearmanclient, примеры использования класса gearmanclient.

Описание на ru2.php.net
Описание на php.ru

.

Популярное:


Содержание: