krowinski / async
异步运行 PHP 闭包
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-08-27 01:52:42 UTC
README
这是如何工作的?
基本上,它是带有序列化闭包的 "exec"。它被包裹在像 symfony process 和 console 这样的库中。我序列化可调用函数并通过 exec 发送给子进程。为了获取回调,我注册了关闭函数并等待进程结束。
为什么不使用 pcntl?
- Pcntl 扩展使用 fork,因此您可以在类似 apache2/php-fpm 的 Web 应用程序中忘记使用它,它仅用于 CLI
- fork 会保留父状态(例如打开的文件),因此有潜在问题
问题?
- 调用 exec 的速度比 fork 慢
- 某些资源/函数/数据必须直接传递给闭包
一些研究
- https://www.phproundtable.com/episode/asynchronous-php - 了解如何使 PHP 异步的好起点
- https://amphp.org/ - PHP 的非阻塞框架
示例?
当然,看看这里 - https://github.com/krowinski/async/blob/master/example/example.php
用例(大多是网站上用户不需要等待的代码)
- 发送回调
- 发布到队列 amqp
- 发送外部分析数据
- 删除文件
- 处理支付
支持 M$ Windows?
不。
待办事项
- 测试