【发布时间】:2011-01-06 14:15:30
【问题描述】:
在 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";
?>
下面的 cmets 说它正在工作。我再说一遍,它不工作。它似乎只是工作,因为我将 $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
【问题讨论】:
-
嗯,如果没有找到该网页,您将不会得到回报。奇怪的是,我再次点击链接并获得了回报。 “开始发送作业成功:H:svmain-desktop:57”我会检查该服务器并确保它运行正常
-
我通过将 do() 更改为 doBackground() 来摆弄它。这仍然不是函数的实际结果。服务器运行正常。
-
gmtest.php 文件有问题,因为主机很好。我看到你修改了文件并且它工作了,然后你再次修改了文件,现在它不工作了。也许发布代码将有助于调试您的问题
-
修改后还是不行。它停止了超时,但仍然无法正常工作。我使用了手册中完全相同的代码。我只是将 do() 更改为 doBackground()。这会导致它返回作业 ID,而不是函数的实际返回。
-
您可以编辑您的问题并发布功能代码吗?