Swoole 中使用通道(Channel)实现协程间通讯(消息队列)
通道
Coroutine\Channel
使用本地内存,不同的进程之间内存是隔离的。
只能在同一进程的不同协程内进行 push
和 pop
操作。
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); } }); });
https://www.cnblogs.com/danhuang/p/13267888.html