luzrain / phpstreamserver-bundle
PHPStreamServer 运行时,适用于 symfony 应用程序
v0.2.2
2024-05-16 06:54 UTC
Requires
- php: >=8.2
- ext-pcntl: *
- ext-posix: *
- luzrain/phpstreamserver: ^0.2.0
- psr/http-factory: ^1.0
- symfony/config: ^7.0
- symfony/dependency-injection: ^7.0
- symfony/error-handler: ^7.0
- symfony/http-kernel: ^7.0
- symfony/psr-http-message-bridge: ^7.0
- symfony/runtime: ^7.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.49
- guzzlehttp/guzzle: ^7.8
- phpunit/phpunit: ^10.5
- symfony/framework-bundle: ^7.0
- vimeo/psalm: ^5.21
Suggests
- ext-inotify: For effective file monitoring
- dragonmantank/cron-expression: For parse cron expressions
This package is auto-updated.
Last update: 2024-09-16 08:03:51 UTC
README
本捆绑包提供了 PHPStreamServer 与 Symfony 框架的集成,以便在基于事件循环的高效运行时中运行您的应用程序。
入门指南
安装 composer 包
$ composer require luzrain/phpstreamserver-bundle
启用捆绑包
<?php // config/bundles.php return [ // ... Luzrain\PHPStreamServerBundle\PHPStreamServerBundle::class => ['all' => true], ];
配置捆绑包
最小配置可能如下所示。
有关所有可用选项和文档,请参阅命令输出。
$ bin/console config:dump-reference phpstreamserver
# config/packages/phpstreamserver.yaml phpstreamserver: servers: - name: 'Webserver' listen: http://0.0.0.0:80 processes: 4
启动应用程序
$ APP_RUNTIME=Luzrain\\PHPStreamServerBundle\\Runtime php public/index.php start
* 为了更好的性能,安装 php-uv 扩展。
重载策略
由于服务器的异步性质,工作者在每次请求中都会重用加载的资源。这意味着在某些情况下,我们需要重新启动工作者。例如,在抛出异常后,以防止服务处于无法恢复的状态。或者在开发环境中每次在 IDE 中更改代码时。
捆绑包提供了一些可配置的重启策略,具体取决于您的需求。
- on_exception
在工作者生命周期中每次抛出异常时重新加载工作者。 - on_each_request
在每次 HTTP 请求后重新加载工作者。此策略用于调试目的。 - on_ttl_limit
当 TTL 生命周期达到时重新加载工作者。可以用于防止内存泄漏。 - on_requests_limit
在每 N 次请求上重新加载工作者。 - on_memory_limit
当内存使用超过阈值值时重新加载工作者。 - on_file_change
每次监控的文件更改时重新加载所有工作者。**
** 强烈建议安装 php-inotify 扩展进行文件监控。如果没有它,监控将以轮询模式工作,这可能会对大型项目造成很大的 CPU 和磁盘压力。
在命令输出中查看每个策略的所有可用选项。
$ bin/console config:dump-reference phpstreamserver reload_strategy
# config/packages/phpstreamserver.yaml phpstreamserver: reload_strategy: on_exception: active: true on_file_change: active: true
调度器
定期任务可以安排执行外部程序以及内部 Symfony 应用程序命令。
要运行 Symfony 命令,只需键入不带任何前缀的命令名。
调度字符串可以以多种方式格式化
- 一个整数,用于将频率定义为秒数。例如:60
- ISO8601 日期时间格式。例如:2024-02-14T018:00:00+08:00
- ISO8601 持续时间格式。例如:PT1M
- DateInterval 支持的相对日期格式。例如:1 minutes
- cron 表达式**。例如:*/1 * * * *
** 注意,如果您想使用 cron 表达式作为调度字符串,则需要安装 dragonmantank/cron-expression 包。
# config/packages/phpstreamserver.yaml phpstreamserver: tasks: # Runs external program every 15 seconds - name: 'Task 1' schedule: '15 second' command: '/bin/external-program' # Runs symfony command as a task every minute - name: 'Task 2' schedule: '*/1 * * * *' command: 'app:my-task-command'
监控器
监控器可以保持进程存活,并在其中一个进程死亡时唤醒。
它还可以与外部命令和内部 Symfony 命令一起工作。
要运行 Symfony 命令,只需键入不带任何前缀的命令名。
# config/packages/phpstreamserver.yaml phpstreamserver: processes: # Runs external program - name: 'External process' command: '/bin/external-program' count: 1 # Runs symfony command - name: 'Symfony command process' command: 'messenger:consume queue --time-limit=600' count: 4