alanalbert/php-async

PHP实现异步回调

v0.1.6 2019-08-12 15:05 UTC

This package is auto-updated.

Last update: 2024-04-20 18:18:34 UTC


README

PHP异步回调的简单实现

php-fpm模式的使用,仍在测试,可能会出现未知问题。

  • php-fpm模式下已解决的问题:

解决异步进程执行完成后,成为僵尸进程的问题

经测试,异步进程的fork不受php-fpm配置的进程数限制

Requirement / 依赖

  • ext-pcntl
  • php > 5.6

Installation / 安装

composer require alanalbert/php-async

Usage / 使用

该库可以工作在php-fpm或cli模式下。(但是,每个异步任务会创建一个进程进行处理,直至任务完成后才会被彻底杀死

现在可以使用PHP Async Manager命令行工具进行异步任务管理。

使用实例

require './vendor/autoload.php';

use Async\DaemonProcess;
use Async\Job;

// 异步操作任务
$job = new Job();
// 设置异步任务
$job->setJob(function () {
  sleep(5);		
});
// 设置回调函数
$job->setCallback(function () {
  file_put_contents('处理完成.txt', '处理完成');		
});

// 实例化异步进程
$daemon = new DaemonProcess($job);
$daemon->run();

Async\DaemonProcess

守护进程类,该类提供的方法有:

// 构造函数,接收实现Async\Contract\JobInterface接口的类的实例
__construct(Async\Contract\JobInterface $job): void

// 运行守护进程
run(): void

Async\Contract\JobInterface

异步任务接口,该接口很简单,只需要实现两个方法即可:

// 异步任务
job(): void
// 回调任务
callback(): void

Async\Job

该类实现了Async\Contract\JobInterface接口,使用起来更方便,其提供的方法有:

// 设置异步任务
// $job可以为callable或Closure类型
// $params为异步任务需要使用的参数,会在执行时,传入给异步任务
setJob($job, $params = null): void

// 设置回调函数
// $callback可以为callable或Closure类型
// $params为回调函数需要使用的参数,会在执行时,传入给回调函数
setCallback($callback, $params = null): void

其他

  • 在使用该库执行异步任务时,会生成日志文件,位于/tmp/php-async-log/
  • 如果不使用Async\Job类,也可以自定义类并实现Async\Contract\JobInterface接口

TODO

  • ...