luzrain/phpstreamserver-bundle

PHPStreamServer 运行时,适用于 symfony 应用程序

v0.2.2 2024-05-16 06:54 UTC

This package is auto-updated.

Last update: 2024-09-16 08:03:51 UTC


README

PHP >=8.2 Symfony ^7.0 Version Tests Status

本捆绑包提供了 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