Swoole 中使用通道(Channel)實現協程間通訊(消息隊列)


通道

Coroutine\Channel 使用本地內存,不同的進程之間內存是隔離的。

只能在同一進程的不同協程內進行 pushpop 操作。

Co::set(['hook_flags'=> SWOOLE_HOOK_ALL]);
Co\run(function(){
    // 設置一個容量為1的通道
    $chan = new Swoole\Coroutine\Channel(1);
    
    Swoole\Coroutine::create(function () use ($chan) {
        for($i = 0; $i < 100000; $i++) {
            co::sleep(1.0);
            // 向通道中寫入數據,通道已滿時會排隊等候
            $chan->push(['rand' => rand(1000, 9999), 'index' => $i]);
            echo "$i pushed! \n";
        }
    });
    
    Swoole\Coroutine::create(function () use ($chan) {
        while(1) {
            $data = $chan->pop();
            var_dump($data);
        }
    });
});


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM