redis punsubscribe未取消订阅

dhxwm5r4  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(400)

我有一个用于pub-sub的redis客户端。我正在使用websocket消息处理程序动态订阅redis频道。websocket消息的负载包含一个id,我用它来创建通道名。比如说 lobby:${lobbyID}:joined . 订阅此频道工作正常,发布到该频道时会收到消息。
但问题是,我有一次想取消这个频道的订阅。通过阅读redis文档,我的假设是 punsubscribe 所以我可以取消订阅任何频道的模式 lobby:*:joined ,但尝试后仍会收到消息。

import redis from 'redis';

const subClient = redis.createClient();

subClient.on('message', (channel, message) => {
  // Received message x on channel y
});

const socketHandlerSubscribe = (lobbyID) => {
  subClient.subscribe(`lobby:${lobbyID}:joined`);
}

const socketHandlerUnsubscribe = () => {
  subClient.punsubscribe('lobby:*:joined'); // true
}

当使用 redis-cli 使用时该模式似乎有效 PUBSUB CHANNEL lobby:*:joined . 我也可以通过将大厅id传递给退订处理程序来解决这个问题,但是 punsubscribe 应该是解决办法。
我在前面的一个场景中也遇到了这种情况,在这个场景中,我遍历了一个用户id数组,并为每个用户id创建了一个订阅 statuses:${userID} 尝试了一个 punsubscribestatuses:* ,没有任何成功。
是我做错了什么,还是这是一个与redis相关的问题?我用的是redis版本 2.8.0

jdg4fx2g

jdg4fx2g1#

我注意到有两种不同类型的订阅。关于渠道和模式。在我的问题中,我订阅了一个频道,并取消订阅了一个模式,这两个是不'兼容',所以这将不起作用。我曾经 nc 调试这个,就像 redis-cli 进入订阅状态时不允许附加命令。

相关问题