2011-12-20 6 views
3

2つの変数を同じワーカー関数にどのように渡しますか?たとえば、クライアントから渡された2つの文字列を連結したいとします。いくつかのコード例では配列が使用されていましたが、動作させることはできません。複数の変数を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"]。 $ data ["string2"]; print $ var1; 乾杯!編集:動作するようにコードの書式を得ることができません - 目が痛いのは残念です – Jingo

+4

Gearman *のPHPドキュメントは、データを文字列ではないワーカーにデータを送信したり、任意の例:-) – Eno

関連する問題