Coroutine Barrier
Barrier একটি সমন্বয়কারীর জন্য একটি সিঙ্ক্রোনাইজেশন টুল, যা আসিনক্রোনাস টাস্কে সমস্তCoroutine সম্পন্ন হওয়ার পর পরবর্তী লজিক চালিয়ে যাওয়ার জন্য অপেক্ষা করতে দেয়। 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 Server
$worker = new Worker('http://0.0.0.0:8001');
$worker->eventLoop = Swoole::class; // Or Swow::class or Fiber::class
$worker->onMessage = function (TcpConnection $connection, Request $request) {
$barrier = Barrier::create();
for ($i=1; $i<5; $i++) {
Coroutine::create(function () use ($barrier, $i) {
// কিছু করুন
});
}
// সমস্ত coroutine সম্পন্ন হওয়া পর্যন্ত অপেক্ষা করুন
Barrier::wait($barrier);
$connection->send('সমস্ত কাজ সম্পন্ন');
};
Worker::runAll();
ইন্টারফেস বর্ণনা
interface BarrierInterface
{
/**
* একটি নতুন Barrier ইনস্ট্যান্স তৈরি করুন
*/
public static function create(): object;
/**
* বর্তমান coroutine স্থগিত করুন, নির্ধারিত Barrier-এর সমস্ত coroutine কাজ সম্পন্ন হওয়ার জন্য অপেক্ষা করুন
*/
public static function wait(object &$barrier, int $timeout = -1): void;
}