موانع التزامن Barrier

Barrier هي أداة لمزامنة التعاون، تسمح في المهام غير المتزامنة بالانتظار حتى تكتمل جميع التعاونات قبل متابعة المنطق اللاحق. تم تنفيذ Barrier على أساس نظام العد المرجعي لــ PHP.

ملاحظة
يتم التعرف تلقائيًا على نوع السائق الأساسي، ويدعم فقط Swoole/Swow/Fiber

تلميح
هذه الميزة تتطلب 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';

// خادم HTTP
$worker = new Worker('http://0.0.0.0:8001');
$worker->eventLoop = Swoole::class; // أو Swow::class أو Fiber::class
$worker->onMessage = function (TcpConnection $connection, Request $request) {
    $barrier = Barrier::create();
    for ($i=1; $i<5; $i++) {
        Coroutine::create(function () use ($barrier, $i) {
            // قم بفعل شيء ما
        });
    }
    // انتظر حتى تنتهي جميع التعاونات
    Barrier::wait($barrier);
    $connection->send('تم إنهاء جميع المهام');
};

Worker::runAll();

وصف الواجهة

interface BarrierInterface
{
    /**
     * إنشاء مثيل Barrier جديد
     */
    public static function create(): object;

    /**
     * تعليق التعاون الحالي، انتظار انتهاء جميع مهام التعاونات المحددة في Barrier
     */
    public static function wait(object &$barrier, int $timeout = -1): void;
}