为了账号安全,请及时绑定邮箱和手机立即绑定

php如何实现非阻塞任务?

php如何实现非阻塞任务?

PHP
慕姐4208626 2019-02-19 21:16:33
问题描述我只是想单纯的用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...https://github.com/reactphp我想实现的是do里面是function,function里面是一些任务,仔细想了下应该是无法实现这个操作的,因为异步任务的话,上下文关系已经变了,不知道我的理解是否正确?
查看完整描述

2 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

PHP本身是顺序执行的,没有异步回调的用法,也没有你说的非阻塞用法。

如果是基于CLI的应用,可以尝试使用swoole来实现。swoole是PHP的一个扩展实现了异步非阻塞的操作。


查看完整回答
反对 回复 2019-02-19
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

默认情况下 是单线程 的 实现不了
重新编译一下开启多线程模式 这个能够实现。

查看完整回答
反对 回复 2019-02-19
  • 2 回答
  • 0 关注
  • 521 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信