Пакет · cpool

Установка

Пакет не тянет зависимостей: только PHP 8.4+. Swoole опционален — от его наличия зависит не работоспособность, а то, будет ли пул настоящим.

Composer

bash
composer require flytachi/winter-cpool

Требования

Требование Роль
PHP 8.4+ обязательно
ext-swoole опционально — включает корутинный пул

Runtime-зависимостей у пакета нет вовсе: ни PSR-интерфейсов, ни драйверов. Всё, что знает о базе или Redis, живёт в вашем адаптере.

Что даёт и чего не даёт Swoole

Пакет проверяет наличие расширения сам и ведёт себя по-разному:

Рантайм Что используется Поведение
Swoole активен ConnectionPool набор соединений, выдача по одному на корутину, ожидание на канале
Swoole нет SingleConnection одно ленивое соединение с тем же контрактом

Второй вариант — не заглушка. Под PHP-FPM или в обычном CLI-скрипте процесс обслуживает одну единицу работы за раз, и пулу нечего распределять; одно соединение с проверкой живости и сроком жизни — правильный ответ для такого рантайма.

Ветвиться в коде не нужно

Оба класса реализуют одну и ту же идею, поэтому фасад выбирает нужный один раз при инициализации, а прикладной код об этом не знает. Как это делается — в Быстром старте.

Для разработки пакета

Если вы дорабатываете сам CPool, ext-swoole уже обязателен: поведение под конкуренцией проверяется живыми корутинами, и без расширения эти тесты не запустятся.

bash
XDEBUG_MODE=off composer test

XDEBUG_MODE=off здесь не прихоть. Наблюдатели функций Xdebug не переживают корутинные стеки: тесты проходят, а процесс падает при завершении — отчёт говорит OK, код возврата 139. Подробности — в CONTRIBUTING.md пакета.

Проверьте установку

php
<?php
require 'vendor/autoload.php';

use Flytachi\Winter\CPool\PoolPolicy;

$policy = PoolPolicy::default();

echo $policy->maximumPoolSize, PHP_EOL;        // 10
echo var_export($policy->housekeepingEnabled(), true), PHP_EOL;   // false
echo var_export(extension_loaded('swoole'), true), PHP_EOL;

Третья строка и говорит, какой режим вам достанется: true — корутинный пул, false — одно соединение.

Дальше