Barrière de Coroutines
La Barrière est un outil utilisé pour la synchronisation des coroutines, permettant d'attendre que toutes les coroutines aient terminé leur exécution avant de continuer la logique suivante dans des tâches asynchrones. La Barrière est basée sur le comptage de références de PHP.
Attention
Le type de pilote est automatiquement reconnu en dessous et ne prend en charge que les pilotes Swoole/Swow/FiberConseil
Cette fonctionnalité nécessite workerman>=5.1.0
<?php
use Workerman\Connection\TcpConnection;
use Workerman\Coroutine\Barrier;
use Workerman\Coroutine;
use Workerman\Events\Swoole;
use Workerman\Protocols\Http\Request;
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
// Serveur Http
$worker = new Worker('http://0.0.0.0:8001');
$worker->eventLoop = Swoole::class; // Ou Swow::class ou Fiber::class
$worker->onMessage = function (TcpConnection $connection, Request $request) {
$barrier = Barrier::create();
for ($i=1; $i<5; $i++) {
Coroutine::create(function () use ($barrier, $i) {
// Faire quelque chose
});
}
// Attendre que toutes les coroutines soient terminées
Barrier::wait($barrier);
$connection->send('Toutes les tâches sont terminées');
};
Worker::runAll();
Description de l'Interface
interface BarrierInterface
{
/**
* Crée une nouvelle instance de Barrier
*/
public static function create(): object;
/**
* Suspend la coroutine actuelle, attendant que toutes les tâches de la Barrier spécifiée soient terminées
*/
public static function wait(object &$barrier, int $timeout = -1): void;
}