vectorial1024 / laravel-process-async
Utilize Laravel Process to run PHP code asynchronously.
Requires
- php: ^8.1
- illuminate/support: ^10.0|^11.0
- laravel/serializable-closure: ^1.0
Requires (Dev)
- laravel/laravel: ^10.0|^11.0
- orchestra/testbench: ^8.0|^9.0
- phpunit/phpunit: ^10
This package is auto-updated.
Last update: 2024-12-11 08:39:01 UTC
README
Utilize Laravel Processes to run PHP code asynchronously.
What really is this?
Laravel Processes was first introduced in Laravel 10. This library wraps around Process::start()
to let you execute code in the background to achieve async, albeit with some caveats:
- You may only execute PHP code
- Restrictions from
laravel/serializable-closure
apply (see their README) - Hands-off execution: no built-in result-checking, check the results yourself (e.g. via database, file cache, etc)
Why should I want this?
This library is very helpful for these cases:
- You want a minimal-setup async for easy vertical scaling
- You want to start quick-and-dirty async tasks right now (e.g. prefetching resources, pinging remote, etc.)
- Best is if your task only has very few lines of code
Of course, if you are considering extreme scaling (e.g. Redis queues in Laravel, multi-worker clusters, etc.) or guaranteed task execution, then this library is obviously not for you.
Installation
via Composer:
composer require vectorial1024/laravel-process-async
Change log
Please see CHANGELOG.md
.
Example code
Tasks can be defined as PHP closures, or (recommended) as an instance of a class that implements AsyncTaskInterface
.
A very simple example task to write Hello World to a file:
// define the task... $target = "document.txt"; $task = new AsyncTask(function () use ($target) { $fp = fopen($target, "w"); fwrite($fp, "Hello World!!"); fflush($fp); fclose($fp); }); // if you are using interfaces, then it is just like this: // $task = new AsyncTask(new WriteToFileTask($target, $message)); // then start it. $task->start(); // the task is now run in another PHP process, and will not report back to this PHP process.
Testing
PHPUnit via Composer script:
composer run-script test
Latest results of cross-platform core testing: