码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-07-12 19:10:33      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:之间   flags   操作   不同   creat   create   use   隔离   排队   

通道

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)实现协程间通讯(消息队列)

标签:之间   flags   操作   不同   creat   create   use   隔离   排队   

原文地址:https://www.cnblogs.com/danhuang/p/13267888.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!