2011-01-06 129 views
0

我试图让PHP使用$ gmclient-> do(“somefunction”,“somedata”)向php发出请求后,函数将函数的值返回给php。但是,php客户端只是超时。我使用的确切代码是直接从PHP手册。我使用的例子#1从http://docs.php.net/manual/en/gearmanclient.do.phpGearman返回值不起作用

浏览器给了我这个消息:

此网页无法使用。

该网页在 http://yoursite.com/client.php 可能暂时,或者它 已永久性地移动到一个新的Web 地址。

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

错误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正在收到请求并将结果回显到终端 - 它只是没有发送回客户端。

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

UPDATE:

按照要求,代码如下:

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"; 

?> 

下面的评论,它说它正在工作..我重复,它是N OT工作。它似乎只工作,因为我改变了$ gmclient-> do到$ gmclient-> doBackground输出作业ID,而不是函数的实际结果。

最后更新(与Solution)

一些工作之后,我想通了,这不是一个编码错误。 Gearman安装不当。而不是使用apt-get安装,我决定手动完成。我从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

如果网页没有找到,你就不会得到回报。奇怪我只是再次点击链接并得到回报。 “开始发送工作成功:H:svmain-desktop:57”我将检查该服务器并确保它正常运行 – 2011-01-06 14:17:58

回答

1

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

0
//Wrong 
$gmworker->addServer(); 

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