PHP Gearman 重复任务



我得到:

  • Debian 6
  • nginx 1.2.6
  • PHP 5.3.20-1~dotdeb.0 (fpm-fcgi) (构建时间: Dec 24 2012 11:53:16)
  • 齿轮 1.1.4
  • PECL 齿轮工分机 1.1.1

得到了两个脚本(可能是我从 php 复制的)。客户:

<?php
$gmc= new GearmanClient();
$gmc->addServer();
$gmc->setCompleteCallback("reverse_complete");
$gmc->setStatusCallback("reverse_status");
$gmc->addTask("reverse", "!dlroW olleH", null, "2");
if (!$gmc->runTasks())
{
    echo "Error " . $gmc->error() . "n";
    exit;
}
echo "Donen";
function reverse_status($task)
{
    echo "Status: " . $task->unique() . ", " . $task->jobHandle() . " - " . $task->taskNumerator() .
         "/" . $task->taskDenominator() . "n";
}
function reverse_complete($task)
{
    echo "Done: " . $task->unique() . ", " . $task->data() . "n";
}
?>

和工人:

<?php
$gmworker= new GearmanWorker();
$gmworker->addServer('127.0.0.1');
$gmworker->addOptions(GEARMAN_WORKER_GRAB_UNIQ);
$gmworker->addFunction("reverse", "reverse_fn");
print "Waiting for tasks...n";
while($gmworker->work())
{
  if ($gmworker->returnCode() != GEARMAN_SUCCESS)
  {
    echo "return code: " . $gmworker->returnCode() . "n";
    break;
  }
}
function reverse_fn($job)
{
  echo "uniq: " . $job->unique() . "n";
  echo "I got job: " . $job->handle() . "n";
  $workload = $job->workload();
  $workload_size = $job->workloadSize();
  echo "Workload: $workload ($workload_size)n";
  for ($x= 0; $x < $workload_size; $x++)
  {
    echo "Sending status: " . ($x + 1) . "/$workload_size is donen";
    $job->sendStatus($x+1, $workload_size);
    $job->sendData(substr($workload, $x, 1));
    sleep(1);
  }
  $result= strrev($workload);
  echo "The result: $resultn";
  return $result;
}
?>

我通过"gearmand -d"运行齿轮。我通过"php worker.php"启动工作。

我从浏览器中打开我的客户端脚本,任务转到服务器,一切都很好。但是当我从 2+ 浏览器选项卡中打开相同的脚本时,gearmand 会收到 2+ 具有相同唯一 ID 的类似任务。

当我添加后台任务或使用 doBackground 方法或在 CLI 模式下时,不会发生这种情况。这也不会发生在 2+ 不同的浏览器中。

我尝试了不同的客户端和服务器版本。同样的事情发生了。

我完全被困住了。感谢您的帮助。

$gmc->addTask("reverse", "!dlroW olleH", null, "2"); 最后一个选项是您的唯一密钥。 所以当然总是相同的。

旧了,但我想我想通了。 浏览器不允许一次发送 2+ 个相同的查询。 第二个等待第一个首先完成。

相关内容

  • 没有找到相关文章

最新更新