Gearman返回值不起作用

时间:2011-01-06 14:15:30

标签: php gearman

我正在尝试使用$ gmclient-> do(“somefunction”,“somedata”)在php发出请求后让gearman从一个函数返回一个值给php。但是,php客户端只是超时。我正在使用的确切代码直接来自php手册。我正在使用http://docs.php.net/manual/en/gearmanclient.do.php

中的示例#1

浏览器给我这条消息:

  

此网页不可用。

     

网页   http://yoursite.com/client.php   可能暂时失败或可能   已永久移动到新网站   地址。

     

有关此错误的详细信息。下面   是原始错误消息

     

错误324(net :: ERR_EMPTY_RESPONSE):   未知错误。

浏览器是Chrome,如果这有助于详细说明错误消息。

如果它有所不同,则使用命令“php worker.php”在终端窗口中执行worker.php文件。我在Ubuntu 9.10 Karmic Koala上运行。我使用http://blog.stuartherbert.com/php/2010/02/26/getting-gearman-up-and-running-on-ubuntu-karmic/

中的说明安装了gearman

我检查了终端窗口,齿轮装置正在收到请求并将结果回显到终端 - 它只是没有发回给客户端。

最终目标是让gearman从执行的函数返回客户端返回值,并将该值显示给用户。

更新:

根据要求,代码如下:

worker.php(工人)

<?php

echo "Starting\n";

# Create our worker object.
$gmworker= new GearmanWorker();

# Add default server (localhost).
$gmworker->addServer();

# Register function "reverse" with the server. Change the worker function to
# "reverse_fn_fast" for a faster worker with no output.
$gmworker->addFunction("reverse", "reverse_fn");

print "Waiting for job...\n";
while($gmworker->work())
{
  if ($gmworker->returnCode() != GEARMAN_SUCCESS)
  {
    echo "return_code: " . $gmworker->returnCode() . "\n";
    break;
  }
}

function reverse_fn($job)
{
  return strrev($job->workload());
}

?>

client.php(客户端代码 - 这是我加载浏览器的页面)

<?php

# Client code

echo "Starting\n";

# Create our client object.
$gmclient= new GearmanClient();

# Add default server (localhost).
$gmclient->addServer();

echo "Sending job\n";

$result = $gmclient->do("reverse", "Hello!");

echo "Success: $result\n";

?>

下面的评论说它正在运作..我再说一遍,它没有用。它似乎只是起作用,因为我将$ gmclient-&gt; do更改为$ gmclient-&gt; doBackground输出作业ID,而不是函数的实际结果。

最终更新(有解决方案)

经过一番工作,我发现这不是编码错误。 Gearman安装不当。我没有使用apt-get install,而是决定手动完成任务。我从gearman网站下载了gearmand(c)(http://gearman.org/index.php?id=download)。然后,我使用齿轮手网站上的教程,以http://gearman.org/index.php?id=getting_started开头,然后http://gearman.org/index.php?id=gearman_php_extension

2 个答案:

答案 0 :(得分:1)

更改您的代码并使用GearmanClient :: addTask。您可以使用其返回值来实现监视过程。检查您可以在GearmanTask类上使用的其他函数。

答案 1 :(得分:0)

//Wrong
$gmworker->addServer(); 

//Correct
$gmworker->addServer("localhost",4730);