协程 Channel
使用方式
use \Imi\Util\CoroutineChannelManager;
// 获取 Swoole\Coroutine\Channel 对象
$channel = CoroutineChannelManager::getInstance('name1');
// 向队列中加入一个成员
CoroutineChannelManager::push('name1', 'test');
// 还支持数组,等一切可以被序列化的值
CoroutineChannelManager::push('name1', [1, 2, 3]);
$result = CoroutineChannelManager::pop('name1');
// 获取通道的状态
$result = CoroutineChannelManager::stats('name');
/*
$result 格式如下:
[
// 消费者数量,表示当前通道为空,有N个协程正在等待其他协程调用push方法生产数据
'consumer_num' => 1,
// 生产者数量,表示当前通道已满,有N个协程正在等待其他协程调用pop方法消费数据
'producer_num' => 1,
// 通道中的元素数量
'queue_bytes' => 1024,
]
*/
// 关闭通道。并唤醒所有等待读写的协程。
CoroutineChannelManager::close('name1');
// 通道读写检测
// $channel1和2 都是 Swoole\Coroutine\Channel 对象
$read = [$channel1];
$write = [$channel2];
$result = CoroutineChannelManager::select('name1', $read, $write, 0.001);