【问题标题】:Gearman return value not workingGearman返回值不起作用
【发布时间】: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,而不是函数的实际返回。
  • 您可以编辑您的问题并发布功能代码吗?

标签: php gearman


【解决方案1】:

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

【讨论】:

    【解决方案2】:
    //Wrong
    $gmworker->addServer(); 
    
    //Correct
    $gmworker->addServer("localhost",4730); 
    

    【讨论】:

      猜你喜欢
      • 2023-03-11
      • 1970-01-01
      • 2018-07-12
      • 1970-01-01
      • 2019-02-04
      • 1970-01-01
      • 2012-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多