猿问

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...

https://github.com/reactphp

我想实现的是do里面是function,function里面是一些任务,仔细想了下应该是无法实现这个操作的,因为异步任务的话,上下文关系已经变了,不知道我的理解是否正确?


慕无忌1623718
浏览 415回答 1
1回答

墨色风雨

PHP本身是顺序执行的,没有异步回调的用法,也没有你说的非阻塞用法。如果是基于CLI的应用,可以尝试使用swoole来实现。swoole是PHP的一个扩展实现了异步非阻塞的操作。
随时随地看视频慕课网APP
我要回答