diff --git a/reference/gearman/gearmanclient.xml b/reference/gearman/gearmanclient.xml new file mode 100644 index 000000000..427117832 --- /dev/null +++ b/reference/gearman/gearmanclient.xml @@ -0,0 +1,72 @@ + + + + + + + + Класс GearmanClient + GearmanClient + + + + +
+ &reftitle.intro; + + Представляет собой класс для подключения к серверу задач Gearman и выполнения + некоторых функций над указанными данными. Выполняемая функция должна быть + зарегистрирована процессом Gearman worker и передаваемые данные являются + непрозрачными для сервера задач. + +
+ + +
+ &reftitle.classsynopsis; + + + + GearmanClient + + + + + GearmanClient + + + + + &Methods; + + + + +
+ +
+ + &reference.gearman.entities.gearmanclient; + +
+ + diff --git a/reference/gearman/gearmanclient/addoptions.xml b/reference/gearman/gearmanclient/addoptions.xml new file mode 100644 index 000000000..2499b6db2 --- /dev/null +++ b/reference/gearman/gearmanclient/addoptions.xml @@ -0,0 +1,67 @@ + + + + + + + + GearmanClient::addOptions + Добавить клиентские опции + + + + &reftitle.description; + + public boolGearmanClient::addOptions + intoptions + + + Добавляет одну или несколько опций к уже установленным. + + + + + &reftitle.parameters; + + + + options + + + Опции для добавления + + + + + + + + + &reftitle.returnvalues; + + Всегда возвращает &true;. + + + + + + diff --git a/reference/gearman/gearmanclient/addserver.xml b/reference/gearman/gearmanclient/addserver.xml new file mode 100644 index 000000000..6f4558060 --- /dev/null +++ b/reference/gearman/gearmanclient/addserver.xml @@ -0,0 +1,110 @@ + + + + + + + + GearmanClient::addServer + Добавить сервер задач для клиента + + + + &reftitle.description; + + public boolGearmanClient::addServer + stringhost127.0.0.1 + intport4730 + + + Добавляет сервер задач к списку серверов, которые могут использоваться для выполнения задачи. + Никаких операций ввода-вывода c сокетом здесь не происходит. Сервер просто добавляется к списку. + + + + + + &reftitle.parameters; + + + + host + + + &gearman.parameter.host; + + + + + port + + + &gearman.parameter.port; + + + + + + + + + &reftitle.returnvalues; + + &return.success; + + + + + &reftitle.examples; + + + Добавление двух серверов задач + +addServer("10.0.0.1"); +$gmclient->addServer("10.0.0.2", 7003); + +?> +]]> + + + + + + + &reftitle.seealso; + + + GearmanClient::addServers + + + + + + + diff --git a/reference/gearman/gearmanclient/addservers.xml b/reference/gearman/gearmanclient/addservers.xml new file mode 100644 index 000000000..fc3285692 --- /dev/null +++ b/reference/gearman/gearmanclient/addservers.xml @@ -0,0 +1,100 @@ + + + + + + + + GearmanClient::addServers + Добавить список серверов задач для клиента + + + + &reftitle.description; + + public boolGearmanClient::addServers + stringservers127.0.0.1:4730 + + + Добавляет список серверов задач, которые могут использоваться для выполнения задачи. + Никаких операций ввода-вывода c сокетом здесь не происходит. Сервера просто добавляются к полному списку серверов. + + + + + + &reftitle.parameters; + + + + servers + + + Список серверов, разделенных запятыми. Каждый сервер указан в формате 'host:port'. + + + + + + + + + &reftitle.returnvalues; + + &return.success; + + + + + &reftitle.examples; + + + Добавление двух серверов задач + +addServers("10.0.0.1,10.0.0.2:7003"); + +?> +]]> + + + + + + + &reftitle.seealso; + + + GearmanClient::addServer + + + + + + + diff --git a/reference/gearman/gearmanclient/addtask.xml b/reference/gearman/gearmanclient/addtask.xml new file mode 100644 index 000000000..28478ab63 --- /dev/null +++ b/reference/gearman/gearmanclient/addtask.xml @@ -0,0 +1,195 @@ + + + + + + + + GearmanClient::addTask + Добавить задачу, которая будет выполнена в параллельном режиме + + + + &reftitle.description; + + public GearmanTaskGearmanClient::addTask + stringfunction_name + stringworkload + mixedcontext + stringunique + + + Добавляет задачу для параллельной работы с другими задачами. Вызовите этот метод для всех задач, + которые будут работать параллельно, а затем вызовите GearmanClient::runTasks + для выполнения работ. Обратите внимание, что должно быть достаточное количество работников + для одновременного выполнения всех задач. + + + + + &reftitle.parameters; + + + + function_name + + + &gearman.parameter.functionname; + + + + + workload + + + &gearman.parameter.workload; + + + + + context + + + &gearman.parameter.context; + + + + + unique + + + &gearman.parameter.unique; + + + + + + + + + &reftitle.returnvalues; + + Объект GearmanTask или &false;, если задача не может быть добавлена. + + + + + &reftitle.examples; + + + Основное представление двух задач + +addServer(); + +# Добавляем задачу для выполнения функции reverse, переворачивающей строку "Hello World!" +$gmclient->addTask("reverse", "Hello World!", null, "1"); + +# Добавляем другую задачу, для выполнения функции reverse, переворачивающей строку "!dlroW olleH" +$gmclient->addTask("reverse", "!dlroW olleH", null, "2"); + +# Устанавливаем функцию, которая будет вызвана по завершению работы +$gmclient->setCompleteCallback("complete"); + +# Выполняем задачи +$gmclient->runTasks(); + +function complete($task) +{ + print "Выполнено: " . $task->unique() . ", " . $task->data() . "\n"; +} + +?> +]]> + + &example.outputs.similar; + + + + + + Основное представление двух задач с передачей контекста приложения + +addServer(); + +# Добавим несколько задач и местоположение результатов +$results = array(); +$client->addTask("reverse", "Hello World!", &$results, "t1"); +$client->addTask("reverse", "!dlroW olleH", &$results, "t2"); + +$client->setCompleteCallback("reverse_complete"); +$client->runTasks(); + +# Результаты должны быть заполнены из обратного вызова +foreach ($results as $id => $result) + echo $id . ": " . $result['handle'] . ", " . $result['data'] . "\n"; + + +function reverse_complete($task, $results) +{ + $results[$task->unique()] = array("handle"=>$task->jobHandle(), "data"=>$task->data()); +} + +?> +]]> + + &example.outputs.similar; + + + + + + + + + &reftitle.seealso; + + + GearmanClient::addTaskHigh + GearmanClient::addTaskLow + GearmanClient::addTaskBackground + GearmanClient::addTaskHighBackground + GearmanClient::addTaskLowBackground + GearmanClient::runTasks + + + + + + + diff --git a/reference/gearman/gearmanclient/addtaskbackground.xml b/reference/gearman/gearmanclient/addtaskbackground.xml new file mode 100644 index 000000000..654ab2c66 --- /dev/null +++ b/reference/gearman/gearmanclient/addtaskbackground.xml @@ -0,0 +1,285 @@ + + + + + + + + GearmanClient::addTaskBackground + Добавить фоновую задачу для работы в параллельном режиме + + + + &reftitle.description; + + public GearmanTaskGearmanClient::addTaskBackground + stringfunction_name + stringworkload + mixedcontext + stringunique + + + Добавляет фоновую задачу для параллельной работы с другими задачами. Вызовите этот метод для всех задач, + которые будут работать параллельно, а затем вызовите GearmanClient::runTasks для + выполнения работ. + + + + + &reftitle.parameters; + + + + function_name + + + &gearman.parameter.functionname; + + + + + workload + + + &gearman.parameter.workload; + + + + + context + + + &gearman.parameter.context; + + + + + unique + + + &gearman.parameter.unique; + + + + + + + + + &reftitle.returnvalues; + + Объект GearmanTask или &false;, если задача не может быть добавлена. + + + + + &reftitle.examples; + + + Две задачи, одна в фоновом режиме другая нет + + Этот пример иллюстрирует различие между выполнением фоновой задачи и + нормальной задачей. Клиент добавляет две задачи для выполнения одних и тех же функций, + но одна добавлена с помощью addTaskBackground. Обратный вызов + установлен так, чтобы выполнение задания можно было проследить. Простой рабочий с + искусственной задержкой сообщает статус выполнения задания, и клиент понимает это + посредством обратного вызова. Два рабочих запущены для этого примера. Обратите внимание, + что фоновая задача не показывается в клиентском выводе. + + +addServer(); + +# Установка нескольких обратных вызовов. Таким образом, мы сможем отслеживать выполнение +$gmc->setCompleteCallback("reverse_complete"); +$gmc->setStatusCallback("reverse_status"); + +# Добавление задачи для функции reverse +$task= $gmc->addTask("reverse", "Hello World!", null, "1"); + +# Добавление другой задачи, но она предназначена для запуска в фоне +$task= $gmc->addTaskBackground("reverse", "!dlroW olleH", null, "2"); + +if (! $gmc->runTasks()) +{ + echo "Ошибка " . $gmc->error() . "\n"; + exit; +} + +echo "Выполнено\n"; + +function reverse_status($task) +{ + echo "Статус: " . $task->unique() . ", " . $task->jobHandle() . " - " . $task->taskNumerator() . + "/" . $task->taskDenominator() . "\n"; +} + +function reverse_complete($task) +{ + echo "Завершено: " . $task->unique() . ", " . $task->data() . "\n"; +} + +?> +]]> + + +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; +} + +?> +]]> + + + Вывод рабочего для двух запущенных работников: + + + + + + Клиент выводит: + + + + + + + + + + &reftitle.seealso; + + + GearmanClient::addTask + GearmanClient::addTaskHigh + GearmanClient::addTaskLow + GearmanClient::addTaskHighBackground + GearmanClient::addTaskLowBackground + GearmanClient::runTasks + + + + + + + diff --git a/reference/gearman/gearmanclient/addtaskhigh.xml b/reference/gearman/gearmanclient/addtaskhigh.xml new file mode 100644 index 000000000..ffcf9de56 --- /dev/null +++ b/reference/gearman/gearmanclient/addtaskhigh.xml @@ -0,0 +1,167 @@ + + + + + + + + GearmanClient::addTaskHigh + Добавить высокоприоритетную задачу для работы в параллельном режиме + + + + &reftitle.description; + + public GearmanTaskGearmanClient::addTaskHigh + stringfunction_name + stringworkload + mixedcontext + stringunique + + + Добавляет высокоприоритетную задачу для параллельной работы с другими задачами. Вызовите этот метод + для всех высокоприоритетных задач, которые будут работать параллельно, а затем вызовите + GearmanClient::runTasks для выполнения работ. Задачи с высоким приоритетом + будут выбраны из очереди раньше задач с нормальным или низким приоритетом. + + + + + &reftitle.parameters; + + + + function_name + + + &gearman.parameter.functionname; + + + + + workload + + + &gearman.parameter.workload; + + + + + context + + + &gearman.parameter.context; + + + + + unique + + + &gearman.parameter.unique; + + + + + + + + + &reftitle.returnvalues; + + Объект GearmanTask или &false;, если задача не может быть добавлена. + + + + + &reftitle.examples; + + + Высокоприоритетная задача вместе с двумя нормальными задачами + + Высокоприоритетная задача включена среди двух других задач. Доступен единственный рабочий, + так что задачи запускаются одна за другой, высокоприоритетные задачи + выполняются в первую очередь. + + +addServer(); + +# установка обратной функции для сигнализации о завершении задачи +$gmc->setCompleteCallback("reverse_complete"); + +# добавление задач, одна из которых высокоприоритетная +$task= $gmc->addTask("reverse", "Hello World!", null, "1"); +$task= $gmc->addTaskHigh("reverse", "!dlroW olleH", null, "2"); +$task= $gmc->addTask("reverse", "Hello World!", null, "3"); + +if (! $gmc->runTasks()) +{ + echo "Ошибка " . $gmc->error() . "\n"; + exit; +} +echo "Выполнено\n"; + +function reverse_complete($task) +{ + echo "Завершено: " . $task->unique() . ", " . $task->data() . "\n"; +} + +?> +]]> + + &example.outputs.similar; + + + + + + + + + &reftitle.seealso; + + + GearmanClient::addTask + GearmanClient::addTaskLow + GearmanClient::addTaskBackground + GearmanClient::addTaskHighBackground + GearmanClient::addTaskLowBackground + GearmanClient::runTasks + + + + + + + diff --git a/reference/gearman/gearmanclient/addtaskhighbackground.xml b/reference/gearman/gearmanclient/addtaskhighbackground.xml new file mode 100644 index 000000000..b174a05c8 --- /dev/null +++ b/reference/gearman/gearmanclient/addtaskhighbackground.xml @@ -0,0 +1,111 @@ + + + + + + + + GearmanClient::addTaskHighBackground + Добавить высокоприоритетную фоновую задачу для работы в параллельном режиме + + + + &reftitle.description; + + public GearmanTaskGearmanClient::addTaskHighBackground + stringfunction_name + stringworkload + mixedcontext + stringunique + + + Добавляет высокоприоритетную фоновую задачу для параллельной работы с другими задачами. + Вызовите этот метод для всех задач, которые будут работать параллельно, а затем вызовите + GearmanClient::runTasks для выполнения работ. + Задачи с высоким приоритетом будут выбраны из очереди раньше задач с нормальным или низким приоритетом. + + + + + &reftitle.parameters; + + + + function_name + + + &gearman.parameter.functionname; + + + + + workload + + + &gearman.parameter.workload; + + + + + context + + + &gearman.parameter.context; + + + + + unique + + + &gearman.parameter.unique; + + + + + + + + + &reftitle.returnvalues; + + Объект GearmanTask или &false;, если задача не может быть добавлена. + + + + + &reftitle.seealso; + + + GearmanClient::addTask + GearmanClient::addTaskHigh + GearmanClient::addTaskLow + GearmanClient::addTaskBackground + GearmanClient::addTaskLowBackground + GearmanClient::runTasks + + + + + + + diff --git a/reference/gearman/gearmanworker.xml b/reference/gearman/gearmanworker.xml new file mode 100644 index 000000000..ba4b45cd4 --- /dev/null +++ b/reference/gearman/gearmanworker.xml @@ -0,0 +1,69 @@ + + + + + + + + Класс GearmanWorker + GearmanWorker + + + + +
+ &reftitle.intro; + + Описание класса. + +
+ + +
+ &reftitle.classsynopsis; + + + + GearmanWorker + + + + + GearmanWorker + + + + + &Methods; + + + + +
+ +
+ + &reference.gearman.entities.gearmanworker; + +
+ +