Coroutine\Redis 订阅模式 调用退订无效果

新手上路,请多包涵

$redis = new SwooleCoroutineRedis();
$redis->connect('127.0.0.1', 6379);
if ($redis->subscribe(['channel1', 'channel2', 'channel3'])) // 或者使用psubscribe
{

while ($msg = $redis->recv()) {
    // msg是一个数组, 包含以下信息
    // $type # 返回值的类型:显示订阅成功
    // $name # 订阅的频道名字 或 来源频道名字
    // $info  # 目前已订阅的频道数量 或 信息内容
    list($type, $name, $info) = $msg;
    if ($type == 'subscribe') // 或psubscribe
    {
        // 频道订阅成功消息,订阅几个频道就有几条
    }
    else if ($type == 'unsubscribe' && $info == 0) // 或punsubscribe
    {
        break; // 收到取消订阅消息,并且剩余订阅的频道数为0,不再接收,结束循环
    }
    else if ($type == 'message') // 若为psubscribe,此处为pmessage
    {
        // 打印来源频道名字
        var_dump($name);
        // 打印消息
        var_dump($info);
        // 处理消息
        // balabalaba....
        if ($need_unsubscribe) // 某个情况下需要退订
        {
            $redis->unsubscribe(); // 继续recv等待退订完成
        }
    }
}

}

调用 $redis->unsubscribe()时,类型为unsubscribe ,info为0 时,执行break或$redis->close();没有退出while循环

阅读 1.6k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进