2011-12-20 3 views
3

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

<?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"]; 
} 
?> 

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

ответ

8

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

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

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

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

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

} else { 
// Maybe throw Exception or something? 
} 
+0

ах - я не знал об этом сериализации! Большое спасибо Layke, мне удалось заставить его работать с: $ data = $ job-> workload(); if (is_string ($ data) && $ data = unserialize ($ data)) {$ var1 = $ data ["string1"]. $ данных [ "string2"]; print $ var1; Приветствия! Изменить: не удается заставить форматирование кода работать - извините за зрение. – Jingo

+4

Документы PHP для Gearman * do * упоминают сериализацию при отправке данных и для получения данных от работника, где данные не являются строкой, НО они не дают любые примеры :-) – Eno

Смежные вопросы