请教PHP的异步处理,pcntl
1个回答
展开全部
client:
<?php
$client=newGearmanClient();
$client->addServer('127.0.0.1', 4730);//本机可以直接addServer(),默认服务器端使用4730端口
$client->setCompleteCallback('completeCallBack');//先绑定才有效
$result1=$client->do('say','do');//do是同步进行,进行处理并返回处理结果。
$result2=$client->doBackground('say','doBackground');//异步进行,只返回处理句柄。
$result3=$client->addTask('say','addTask');//添加任务到队列,同步进行?通过添加task可以设置回调函数。
$result4=$client->addTaskBackground('say','addTaskBackground');//添加后台任务到队列,异步进行?
$client->runTasks();//运行队列中的任务,只是do系列不需要runTask()。
echo'result1:';
var_dump($result1);
echo'<br/>';
echo'result2:';
var_dump($result2);
echo'<br/>';
echo'result3:';
var_dump($result3);
echo'<br/>';
echo'result4:';
var_dump($result4);
echo'<br/>';
//绑定回调函数,只对addTask有效
functioncompleteCallBack($task)
{
echo'CompleteCallback!handle result:'.$task->data().'<br/>';
}
worker:
<?php
$worker=newGearmanWorker();
$worker->addServer();
$worker->addFunction('say',function(GearmanJob$job){
$workload=$job->workload();//接收client传递的数据
echo'receive data:'.$workload.PHP_EOL;
returnstrrev($workload);//仅作反转处理
});
//无际循环运行,gearman内部已有处理,不会出现占用过高死掉的情况
while($worker->work()){
if($worker->returnCode() !== GEARMAN_SUCCESS){
echo'error'.PHP_EOL;
}
}
以上client输出:
CompleteCallback!handle result:ksaTdda
result1:string(2) “od”
result2:string(17) “H:iZ943bixttyZ:87″
result3:object(GearmanTask)#2 (0) { }
result4:object(GearmanTask)#3 (0) { }
worker输出:
receive data:do
receive data:doBackground
receive data:addTaskBackground
receive data:addTask
<?php
$client=newGearmanClient();
$client->addServer('127.0.0.1', 4730);//本机可以直接addServer(),默认服务器端使用4730端口
$client->setCompleteCallback('completeCallBack');//先绑定才有效
$result1=$client->do('say','do');//do是同步进行,进行处理并返回处理结果。
$result2=$client->doBackground('say','doBackground');//异步进行,只返回处理句柄。
$result3=$client->addTask('say','addTask');//添加任务到队列,同步进行?通过添加task可以设置回调函数。
$result4=$client->addTaskBackground('say','addTaskBackground');//添加后台任务到队列,异步进行?
$client->runTasks();//运行队列中的任务,只是do系列不需要runTask()。
echo'result1:';
var_dump($result1);
echo'<br/>';
echo'result2:';
var_dump($result2);
echo'<br/>';
echo'result3:';
var_dump($result3);
echo'<br/>';
echo'result4:';
var_dump($result4);
echo'<br/>';
//绑定回调函数,只对addTask有效
functioncompleteCallBack($task)
{
echo'CompleteCallback!handle result:'.$task->data().'<br/>';
}
worker:
<?php
$worker=newGearmanWorker();
$worker->addServer();
$worker->addFunction('say',function(GearmanJob$job){
$workload=$job->workload();//接收client传递的数据
echo'receive data:'.$workload.PHP_EOL;
returnstrrev($workload);//仅作反转处理
});
//无际循环运行,gearman内部已有处理,不会出现占用过高死掉的情况
while($worker->work()){
if($worker->returnCode() !== GEARMAN_SUCCESS){
echo'error'.PHP_EOL;
}
}
以上client输出:
CompleteCallback!handle result:ksaTdda
result1:string(2) “od”
result2:string(17) “H:iZ943bixttyZ:87″
result3:object(GearmanTask)#2 (0) { }
result4:object(GearmanTask)#3 (0) { }
worker输出:
receive data:do
receive data:doBackground
receive data:addTaskBackground
receive data:addTask
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询