php 守护 gearman work,PHP Gearman重复任务

我得到了:

Debian 6

nginx 1.2.6

PHP 5.3.20-1~docdeb.0(fpm-fcgi)(建于2012年12月24日11:53:16)

gearmand 1.1.4

pecl gearman ext 1.1.1

我有两个脚本(可能是我从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 "Done\n";

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";

}

?>

和工人:

$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 done\n";

$job->sendStatus($x+1, $workload_size);

$job->sendData(substr($workload, $x, 1));

sleep(1);

}

$result= strrev($workload);

echo "The result: $result\n";

return $result;

}

?>

我通过&#34; gearmand -d&#34;运行gearmand。

我通过&#34; php worker.php&#34;。开始工作

我从浏览器打开我的客户端脚本,任务进入服务器,一切正常。

但是,当我从2个以上的浏览器标签打开相同的脚本时,gearmand会收到2个具有相同唯一ID的类似任务。

当我添加后台任务或使用doBackground方法或在CLI模式下,这不会发生。

这也不会发生在2个以上不同的浏览器中。

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

我完全卡住了。

谢谢你的帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值