Php 客户端未从worker接收到任何状态

Php 客户端未从worker接收到任何状态,php,gearman,Php,Gearman,我使用的代码与中的示例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

我使用的代码与中的示例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  
相反,这是我得到的:

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  
据我所知,工作人员工作正常,它真的将数据发送回客户端,这就是为什么我得到
成功:你好!!奥利
而不仅仅是
!olleH
,我想知道的是为什么轮询状态不起作用

经过一些调试,我发现
do..while
块只运行一次
$gmclient->returnCode()
return
0

看起来我的客户没有收到工人的任何状态

一些信息:
操作系统:ubuntu 14.04(流浪者)
gearmand版本:1.1.12
扩展版本:1.1.2
libgearman版本:1.1.12


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

我猜文档要么已经过时,要么完全错了。我做了一点挖掘,对0.21中的Gearman::do()函数做了一个更改,使其运行到完成或出错。看

在版本0.21中更改:将不再返回GEARMAN_暂停。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;
}

?>