客户未收到工人的任何状态

时间:2014-12-03 06:54:30

标签: php gearman

我使用的代码与http://php.net/manual/en/gearmanclient.donormal.php

中的示例#2完全相同

我得到了预期的工人输出,如手册

问题是,我的客户端没有产生预期的输出,如手册

预期的客户输出是:

Starting
Sending job
Status: 1/6 complete
Data: H
Status: 2/6 complete
Data: e
Status: 3/6 complete
Data: l
Status: 4/6 complete
Data: l
Status: 5/6 complete
Data: o
Status: 6/6 complete
Data: !
Success: !olleH

相反,这就是我所得到的:

Sending job
Success: Hello!!olleH  

据我所知,工作人员按预期工作,它确实将数据发送回客户端,这就是为什么我得到Sucess: Hello!!olleH而不仅仅是!olleH,我想知道为什么轮询状态不起作用

经过一些调试后,我发现do..while块仅运行一次 $gmclient->returnCode()返回0
看起来我的客户端没有收到工作人员的任何状态

有些信息:
os:ubuntu 14.04(vagrant)
gearmand版本:1.1.12
扩展版:1.1.2
libgearman版本:1.1.12

我是齿轮手的新手,我想要实现的是与手册中相同的客户端输出,非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

我的猜测是文档过时或错误。我做了一点挖掘,在0.21中对Gearman :: do()函数进行了更改,使其运行直到完成或错误。请参阅http://gearman.info/libgearman/gearman_client_do.html

  

在版本0.21中更改:将不再返回GEARMAN_PAUSE。 do操作现在将运行直到完成或错误。

相反,我认为最好用任务和一些回调来做你想要的事情:

<?php

# Client code

# Create our client object.
$gmclient= new GearmanClient();

# Add default server (localhost).
$gmclient->addServer();

echo "Sending job\n";

# Send reverse job
$gmclient->setCompleteCallback('gm_complete');
$gmclient->setDataCallback('gm_data');
$gmclient->setStatusCallback('gm_status');
$gmclient->addTask("reverse", "Hello!");
$gmclient->runTasks();

function gm_data(GearmanTask $task) {
  echo "Data: {$task->data()}".PHP_EOL;
}

function gm_complete(GearmanTask $task) {
  echo "Success: {$task->data()}".PHP_EOL;
}

function gm_status(GearmanTask $task) {
  echo "Status: {$task->taskNumerator()} / {$task->taskDenominator()}".PHP_EOL;
}

?>