将多个变量传递给Gearman工作器函数

Jin*_*ngo 3 php gearman

如何将两个变量传递给同一个worker函数?例如,假设我希望连接从客户端传递的两个字符串.我在一些示例代码中看到了一个正在使用的数组,但我无法让它工作.

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

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

这告诉我这是一个无效的工作负载(我假设它是一个传递的数组).我应该如何传递它们 - 我应该为每个创建任务吗?

然后,如果我不能发送数组,我怎么能在worker函数中使用多个变量.我尝试了类似函数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"];
}
?>
Run Code Online (Sandbox Code Playgroud)

最好的方法是什么?非常感谢!

Lay*_*yke 8

你应该序列化它.

就像是:

$data = serialize( $array );
$client->addTask("string_concat", $data);
Run Code Online (Sandbox Code Playgroud)

然后,从你的工人,你可以做一些像......

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

} else {
 // Maybe throw Exception or something?
}
Run Code Online (Sandbox Code Playgroud)

  • Gearman*的PHP文档提到序列化时,将数据发送到数据并且从数据不是字符串的工作者获取数据但他们不提供任何示例:-) (4认同)