0

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

浏览器给了我这个消息:

此网页无法使用。

http://yoursite.com/client.php上的网页 可能暂时关闭,或者它可能已永久移动到新网址。

有关此错误的更多信息。以下是原始错误消息

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

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

万一有所不同,worker.php 文件正在使用命令“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 正在获取请求并将结果回显到终端中 - 它只是没有发送回客户端。

最终目标是让 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->do 更改为 $gmclient->doBackground ,它输出作业 ID,而不是函数的实际结果。

最终更新(有解决方案)

经过一番工作,我发现这不是编码错误。Gearman 安装不正确。我决定手动执行操作,而不是使用 apt-get install。我从 gearman 网站 (http://gearman.org/index.php?id=download) 下载了 gearmand (c)。然后我使用了 gearman 网站上的教程,从http://gearman.org/index.php?id=getting_started开始,然后是http://gearman.org/index.php?id=gearman_php_extension

4

2 回答 2

1

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

于 2011-06-14T05:26:47.833 回答
0
//Wrong
$gmworker->addServer(); 

//Correct
$gmworker->addServer("localhost",4730); 
于 2014-10-12T15:18:18.747 回答