saedvaziry/laravel-async

Laravel Async

1.2.1 2024-05-01 19:32 UTC

This package is auto-updated.

Last update: 2024-08-31 00:36:05 UTC


README

laravel-async-demo.mp4

Laravel Async 是一个简单的 Laravel 扩展包,允许您在不使用工作进程和监控程序的情况下异步运行代码!

与 Laravel Process、Symfony Process 或其他类似包不同,您不需要等待主进程中的子进程完成!

use SaeedVaziry\LaravelAsync\Facades\AsyncHandler;

AsyncHandler::dispatch(function () {
    sleep(10);
    
    info("Hello from Async process after 10 seconds!");
});

info("dispatched the process!");

演示

https://youtu.be/0q8ki5JiD2o?si=Pi1X5zV5oM6Ktae3

它是如何工作的?

您可以称它为一个窍门或技巧!但 Laravel Async 使用操作系统的后台进程来运行您的代码。

它提供了一个简单的 Laravel 控制台命令,将您的代码反序列化并在操作系统的后台运行。

支持的操作系统

目前,它仅支持 Linux 和基于 Unix 的操作系统。

安装

您可以通过 Composer 安装此包。

composer require saeedvaziry/laravel-async

配置

要发布配置文件,您可以运行以下命令

php artisan vendor:publish --provider="SaeedVaziry\LaravelAsync\LaravelAsyncServiceProvider"

这将创建一个 laravel-async.php 文件在您的 config 目录中。

php_path

PHP 可执行文件的路径。默认值(PHP 二进制文件的路径)应该适用于 CLI 使用。但是,如果您想在 Web 上使用它,您应该设置 PHP 二进制文件的路径,因为默认值将是 Web 服务器的 PHP 二进制文件,如 php-fpm。

您也可以通过 .env 文件设置。

LARAVEL_ASYNC_PHP_PATH=/path/to/php

用法

用法非常简单直接。您可以将闭包或您的 Laravel Job 类提供给 AsyncHandler 门面。

闭包

use SaeedVaziry\LaravelAsync\Facades\AsyncHandler;

AsyncHandler::dispatch(function () {
    info("Hello from Async process!");
});

作业

您可以发送作业或任何具有 handle 方法的其他类。

use SaeedVaziry\LaravelAsync\Facades\AsyncHandler;

AsyncHandler::dispatch(new MyJob());

超时

默认超时时间为 60 秒。

这将设置进程的超时时间为 10 秒,如果它没有在 10 秒内完成,它将终止该进程。

use SaeedVaziry\LaravelAsync\Facades\AsyncHandler;

AsyncHandler::timeout(10)->dispatch(function () {
    info("Hello from Async process!");
});

您也可以不设置超时来调度!

!!! 注意:如果您代码卡在无限循环中,这将会耗尽您的服务器资源。

use SaeedVaziry\LaravelAsync\Facades\AsyncHandler;

AsyncHandler::withoutTimeout()->dispatch(function () {
    info("Hello from Async process!");
});

测试

您可以在测试中模拟 AsyncHandler 门面并检查代码是否已调度。

use SaeedVaziry\LaravelAsync\Facades\AsyncHandler;

AsyncHandler::fake();

// Your code that dispatches the AsyncHandler

AsyncHandler::assertDispatchedCounts(1);

您可以通过测试来查看您调度了多少次异步进程。

贡献

请随时提交问题或发起 PR。

许可

MIT 许可证(MIT)。有关更多信息,请参阅许可文件