猿问

大佬们遇到过这个问题吗?php如何实现非阻塞任务?

问题描述
我只是想单纯的用php实现非阻塞任务
$worker->do(function(){
//...io耗时任务...
})->then(function($result){
//任务完成后的通知回调
});
有什么好的方式呢?执行任务的时候不能阻塞。
其实下面的几种都没问题,swoolereactPHPworkerman等均能实现下面的处理逻辑
$worker->request('http://....')->then(function($result){
//任务完成后的通知回调
});
$worker->query('select*from.....')->then(function($result){
//任务完成后的通知回调
});
$worker->getFile('./test.txt')->then(function($result){
//任务完成后的通知回调
});
但是下面这种却无法实现。
$worker->do(function(){
request('http://...');
query('select*....');
getFile('./test.txt');
reject(...);//error
resolve(...);//success
})->then(function($result){
//任务完成后的通知回调
});
一些同行推荐了下面的链接作为参考
https://github.com/hprose/hpr...
http://nikic.github.io/2012/1...
https://github.com/reactphp
我想实现的是do里面是function,function里面是一些任务,仔细想了下应该是无法实现这个操作的,因为异步任务的话,上下文关系已经变了,不知道我的理解是否正确?
慕少森
浏览 350回答 2
微课
2回答

慕尼黑的夜晚无繁华

PHP本身是顺序执行的,没有异步回调的用法,也没有你说的非阻塞用法。如果是基于CLI的应用,可以尝试使用swoole来实现。swoole是PHP的一个扩展实现了异步非阻塞的操作。

慕桂英4014372

workerman了解一下,纯的php.补充:没看你给的链接,只给个简单的思想,类似于nodejs中写回调的方法;$count=0;$worker->request('http://....')->then(function($result){//任务完成后的通知回调global$count;$count++;then_do();});$worker->query('select*from.....')->then(function($result){//任务完成后的通知回调global$count;$count++;then_do();});$worker->getFile('./test.txt')->then(function($result){//任务完成后的通知回调global$count;$count++;then_do();});functionthen_do(){global$count;if($count
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答