krowinski / async
Run php closure asynchronously
v2.0.0
2019-12-18 10:01 UTC
Requires
- php: >=7.1
- ext-pcntl: *
- jeremeamia/superclosure: ^2.4
- symfony/console: ^4.0|^5.0
- symfony/process: ^4.0|^5.0
This package is auto-updated.
Last update: 2024-10-27 02:06:02 UTC
README
How this work?
Well its basically "exec" with serialised closure. "Dressed" in nice libs like symfony process and console. I serialise callable function and sent to child process by exec. To get callback I register shutdown function and wait for process to finish.
Why not pcntl ?
- Pcntl extension fork, so you can forget using it in web applications like apache2/php-fpm etc its only for CLI
- forks retains the parent state (for example open files) so its problematic
Problems ?
- Calling exec is slower then fork
- Some resource/function/data must be passed directly to closure
Some research
- https://www.phproundtable.com/episode/asynchronous-php - good start to "know how" make php async
- https://amphp.org/ - non-blocking framework for PHP
Example ?
Sure take a look - https://github.com/krowinski/async/blob/master/example/example.php
User cases (mostly some code on website that user don't need to wait for)
- send callback
- publish to queue amqp
- send external analytic data
- remove files
- process payments
Supports M$ Windows?
NO.
TODO
- tests