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


Client did not receive any status from worker

我使用的代码与 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
看起来我的客户端没有收到工作人员的任何状态

一些信息:
操作系统 : Ubuntu 14.04 (流浪(
齿轮版本:1.1.12
扩展版本 : 1.1.2
Libgearman 版本 : 1.1.12

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

我的猜测是文档要么过时,要么完全错误。我做了一些挖掘,0.21 中的 Gearman::d o(( 函数发生了变化,使其运行直到完成或错误。请参阅 http://gearman.info/libgearman/gearman_client_do.html。

在 0.21 版更改: GEARMAN_PAUSE将不再返回。现在,执行操作将一直运行到完成或出错。

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

<?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;
}
?>