Передача нескольких переменных в рабочую функцию Gearman - PullRequest
3 голосов
/ 21 декабря 2011

Как передать две переменные одной и той же рабочей функции? Например, скажем, я хотел объединить две строки, которые я передал от клиента. В некотором примере кода я видел используемый массив, но не могу заставить его работать.

<?php
$client= new GearmanClient();
$client->addServer();

$arguments = array(
      "string1" => "hey",
      "string2" => "there"
);
$client->addTask("string_concat", $arguments);
$client->runTasks();
?>

Однако это говорит о том, что это недопустимая рабочая нагрузка (я полагаю, это потому, что передается массив). Как я должен их передавать - я должен создать задачу для каждого?

Тогда, если я не могу отправить массив, как я могу использовать несколько переменных в рабочей функции. Я пробовал как функция String_Concat ($ job, $ job2), но потом я не уверен, как добавить их в рабочую нагрузку ()

Вот пример кода, если я смог передать массивы:

<?php

$worker= new GearmanWorker();
$worker->addServer();
$worker->addFunction("string_concat", "String_Concat");
while ($worker->work());

function String_Concat($job)
{
    $arguments = $job->workload();
    return $arguments["string1"] . $arguments["string2"];
}
?>

Какой лучший способ сделать это? Большое спасибо!

1 Ответ

8 голосов
/ 21 декабря 2011

Вы должны сериализовать это.

Что-то вроде:

$data = serialize( $array );
$client->addTask("string_concat", $data);

Тогда из вашего работника вы могли бы сделать что-то вроде ...

if (is_string($data) && $data = unserialize($workload)) {

} else {
 // Maybe throw Exception or something?
}
...