saedvaziry / laravel-async
Laravel Async
Requires
- php: ^8.1
- illuminate/console: ^9.0|^10.0|^11.0
- illuminate/process: ^9.0|^10.0|^11.0
- illuminate/support: ^9.0|^10.0|^11.0
Requires (Dev)
- laravel/pint: ^1.13
- orchestra/testbench: ^7.0|^8.0|^9.0
- phpunit/phpunit: ^9.0|^10.0|^11.0
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)。有关更多信息,请参阅许可文件。