在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