协程 Channel

    使用方式

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