我正在尝试使用$ 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
答案 0 :(得分:1)
更改您的代码并使用GearmanClient :: addTask。您可以使用其返回值来实现监视过程。检查您可以在GearmanTask类上使用的其他函数。
答案 1 :(得分:0)
//Wrong
$gmworker->addServer();
//Correct
$gmworker->addServer("localhost",4730);