ifcastle/amphp-pool
最新稳定版本:v1.0.2
Composer 安装命令:
composer require ifcastle/amphp-pool
包简介
Middle-level library for creating Stateful Asynchronous server-side applications using the pure PHP and AMPHP
关键字:
README 文档
README
Middle-level library for creating Stateful Asynchronous server-side applications
using the pure PHP and AMPHP Library
- without additional extensions (such as
Swoole) - without auxiliary tools from other programming languages (such as
Go+Roadrunner)
Why is this needed?
- You want to use only pure PHP without additional extensions.
- You want to control how your Workers operate, and you want to be able to program their behavior to ensure a better balance of performance and stability.
Features
- Workers for handling connections and background tasks (jobs), which are restarted and scaled on demand.
- Support for different
typesandgroupsof Workers with varying behaviors. - Strategies for
restarting,scaling, andpickupingWorkers for load distribution. - Execution of Jobs based on
priorityandweight(weight being an estimate of resource consumption). Coroutine Schedulerfor distributing a load among long-running background jobs.- Support for telemetry and statistics with Prometheus + Grafana.
- Support for Windows.
But isn't PHP slow?
Please review the performance considerations.
Installation
composer require ifcastle/amphp-pool
Example
<?php declare(strict_types=1); require_once __DIR__ . '/vendor/autoload.php'; use Amp\ByteStream; use Amp\Log\ConsoleFormatter; use Amp\Log\StreamHandler; use IfCastle\AmpPool\WorkerGroup; use IfCastle\AmpPool\WorkerPool; use IfCastle\AmpPool\WorkerTypeEnum; use Examples\HttpServer\HttpReactor; use Monolog\Logger; use Monolog\Processor\PsrLogMessageProcessor; $logHandler = new StreamHandler(ByteStream\getStdout()); $logHandler->pushProcessor(new PsrLogMessageProcessor()); $logHandler->setFormatter(new ConsoleFormatter()); $logger = new Logger('server'); $logger->pushHandler($logHandler); $logger->useLoggingLoopDetection(false); // 1. Create a worker pool with a logger $workerPool = new WorkerPool(logger: $logger); // 2. Fill the worker pool with workers. // We create a group of workers with the Reactor type, which are intended to handle incoming connections. // The HttpReactor class is the entry point for the workers in this group. // Please see the HttpReactor class for more details. $workerPool->describeGroup(new WorkerGroup( entryPointClass: HttpReactor::class, workerType: WorkerTypeEnum::REACTOR, minWorkers: 1 )); // 3. Run the worker pool // Start the main loop of the worker pool // Now the server is ready to accept incoming connections. // Try http://127.0.0.1:9095/ in your browser. $workerPool->run();
Please also read the Getting Started guide.
Prometheus + Grafana
Please see: How to setup Grafana Dashboard
统计信息
- 总下载量: 20
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 11
- 点击次数: 1
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2024-07-02
