Pool::__construct
(PHP 8.6+, True Async 1.0)
public Pool::__construct(
callable $factory,
?callable $destructor = null,
?callable $healthcheck = null,
?callable $beforeAcquire = null,
?callable $beforeRelease = null,
int $min = 0,
int $max = 10,
int $healthcheckInterval = 0
)Crée un nouveau pool de ressources. Le pool gère un ensemble d'objets réutilisables (connexions, clients, descripteurs de fichiers, etc.), en les créant et les détruisant automatiquement selon les besoins.
Paramètres
factory : Une fonction de fabrique pour créer une nouvelle ressource. Appelée chaque fois que le pool a besoin d'une nouvelle ressource et que le nombre actuel est inférieur à max. Doit retourner une ressource prête à l'emploi.
destructor : Une fonction pour détruire proprement une ressource. Appelée lorsque le pool est fermé ou lorsqu'une ressource est retirée (par exemple, après un échec de vérification de santé). null --- la ressource est simplement retirée du pool sans actions supplémentaires.
healthcheck : Une fonction de vérification de santé des ressources. Prend une ressource, retourne bool. true --- la ressource est saine, false --- la ressource sera détruite et remplacée. null --- aucune vérification de santé n'est effectuée.
beforeAcquire : Un hook appelé avant qu'une ressource ne soit distribuée. Prend la ressource. Peut être utilisé pour préparer la ressource (par exemple, réinitialiser l'état). null --- pas de hook.
beforeRelease : Un hook appelé avant qu'une ressource ne soit retournée au pool. Prend la ressource, retourne bool. S'il retourne false, la ressource est détruite au lieu d'être retournée au pool. null --- pas de hook.
min : Le nombre minimum de ressources dans le pool. Lors de la création du pool, min ressources sont créées immédiatement. Par défaut 0.
max : Le nombre maximum de ressources dans le pool. Lorsque la limite est atteinte, les appels à acquire() se bloquent jusqu'à ce qu'une ressource soit libérée. Par défaut 10.
healthcheckInterval : L'intervalle de vérification de santé en arrière-plan des ressources en millisecondes. 0 --- la vérification en arrière-plan est désactivée (vérification uniquement à l'acquisition).
Exemples
Exemple #1 Pool de connexions PDO
<?php
use Async\Pool;
$pool = new Pool(
factory: function(): PDO {
return new PDO('mysql:host=localhost;dbname=app', 'user', 'pass', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]);
},
destructor: function(PDO $pdo): void {
// PDO is closed automatically when removed
},
healthcheck: function(PDO $pdo): bool {
try {
$pdo->query('SELECT 1');
return true;
} catch (\Throwable) {
return false;
}
},
min: 2,
max: 20,
healthcheckInterval: 30000 // check every 30 seconds
);
$conn = $pool->acquire();
$result = $conn->query('SELECT * FROM users');
$pool->release($conn);Exemple #2 Pool avec hooks
<?php
use Async\Pool;
$pool = new Pool(
factory: fn() => new RedisClient('127.0.0.1', 6379),
destructor: fn(RedisClient $r) => $r->close(),
beforeAcquire: function(RedisClient $r): void {
$r->select(0); // reset to default database
},
beforeRelease: function(RedisClient $r): bool {
// If the connection is broken — destroy the resource
return $r->isConnected();
},
max: 5
);Voir aussi
- Pool::acquire --- Acquérir une ressource du pool
- Pool::release --- Libérer une ressource dans le pool
- Pool::close --- Fermer le pool