php如何实现非阻塞任务?
问题描述
我只是想单纯的用php实现非阻塞任务
$worker -> do(function(){
//...io耗时任务...
}) -> then(function($result){
//任务完成后的通知回调
});
有什么好的方式呢? 执行任务的时候不能阻塞。
其实下面的几种都没问题,swoole reactPHP workerman等均能实现下面的处理逻辑
$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...
我想实现的是do里面是function,function里面是一些任务,仔细想了下应该是无法实现这个操作的,因为异步任务的话,上下文关系已经变了,不知道我的理解是否正确?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
swoole可以
默认情况下 是单线程 的 实现不了
重新编译一下开启多线程模式 这个能够实现。
workerman 了解一下,纯的php.
补充:
没看你给的链接,只给个简单的思想,类似于 nodejs 中写回调的方法;
PHP本身是顺序执行的,没有异步回调的用法,也没有你说的非阻塞用法。
如果是基于CLI的应用,可以尝试使用swoole来实现。swoole是PHP的一个扩展实现了异步非阻塞的操作。