Swoole 中使用通道(Channel)实现协程间通讯(消息队列)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
        }
    });
});

以上是关于Swoole 中使用通道(Channel)实现协程间通讯(消息队列)的主要内容,如果未能解决你的问题,请参考以下文章

Swoole 中协程的使用注意事项及协程中的异常捕获

Swoole系列4.4协程间通信Channel及WithGroup

golang协程——通道channel阻塞

Kotlin 协程协程中的多路复用技术 ① ( 多路复用技术 | await 协程多路复用 | Channel 通道多路复用 )

swoole channel之mysql连接池实现

Kotlin 协程Channel 通道 ② ( Channel 通道容量 | Channel 通道迭代 | 使用 iterator 迭代器进行迭代 | 使用 for in 循环进行迭代 )