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
)
Crea un nuevo pool de recursos. El pool gestiona un conjunto de objetos reutilizables (conexiones, clientes, descriptores de archivos, etc.), creándolos y destruyéndolos automáticamente según sea necesario.
Parámetros
- factory
- Una función de fábrica para crear un nuevo recurso. Se invoca cada vez que
el pool necesita un nuevo recurso y el recuento actual es menor que
max. Debe devolver un recurso listo para usar. - destructor
- Una función para destruir correctamente un recurso. Se invoca cuando el pool se cierra
o cuando un recurso se elimina (por ejemplo, tras una verificación de salud fallida).
null— el recurso simplemente se elimina del pool sin acciones adicionales. - healthcheck
- Una función de verificación de salud del recurso. Recibe un recurso, devuelve
bool.true— el recurso está sano,false— el recurso será destruido y reemplazado.null— no se realiza verificación de salud. - beforeAcquire
- Un hook que se invoca antes de entregar un recurso. Recibe el recurso.
Puede usarse para preparar el recurso (por ejemplo, restablecer el estado).
null— sin hook. - beforeRelease
- Un hook que se invoca antes de devolver un recurso al pool. Recibe el recurso,
devuelve
bool. Si devuelvefalse, el recurso se destruye en lugar de ser devuelto al pool.null— sin hook. - min
- El número mínimo de recursos en el pool. Al crear el pool,
se crean
minrecursos inmediatamente. El valor predeterminado es0. - max
- El número máximo de recursos en el pool. Cuando se alcanza el límite,
las llamadas a
acquire()se bloquean hasta que se libere un recurso. El valor predeterminado es10. - healthcheckInterval
- El intervalo para verificaciones de salud en segundo plano en milisegundos.
0— la verificación en segundo plano está desactivada (solo se verifica al adquirir).
Ejemplos
Ejemplo #1 Pool de conexiones 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 se cierra automáticamente al ser eliminado
},
healthcheck: function(PDO $pdo): bool {
try {
$pdo->query('SELECT 1');
return true;
} catch (\Throwable) {
return false;
}
},
min: 2,
max: 20,
healthcheckInterval: 30000 // verificar cada 30 segundos
);
$conn = $pool->acquire();
$result = $conn->query('SELECT * FROM users');
$pool->release($conn);
Ejemplo #2 Pool con 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); // restablecer a la base de datos predeterminada
},
beforeRelease: function(RedisClient $r): bool {
// Si la conexión está rota — destruir el recurso
return $r->isConnected();
},
max: 5
);
Ver también
- Pool::acquire — Adquirir un recurso del pool
- Pool::release — Liberar un recurso de vuelta al pool
- Pool::close — Cerrar el pool