Redis punsubscribe 不是取消订阅
Redis punsubscribe not unsubscribing
我有一个用于 pub-sub 的 redis 客户端。我正在使用 websocket 消息处理程序动态订阅 redis 频道。 websocket 消息的有效负载包含一个我用来创建通道名称的 ID。例如 lobby:${lobbyID}:joined
。
订阅此频道工作正常,发布到该频道时会收到消息。
但我遇到的问题是我想一次性取消订阅该频道。我通过阅读 redis-documentation 的假设是我会使用 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 数组,并在 statuses:${userID}
上为每个用户创建了一个订阅,并在 statuses:*
上尝试了一个 punsubscribe
,但没有任何成功。
我是不是做错了什么,或者这是一个与 node-redis 相关的问题?我正在使用 redis 版本 2.8.0
我注意到有两种不同类型的订阅。关于渠道和模式。在我的问题中,我订阅了一个频道,并取消订阅了一个模式,这两个不是 'compatible',所以这是行不通的。
我使用 nc
来调试它,因为 redis-cli
在进入订阅状态时不允许其他命令。
我有一个用于 pub-sub 的 redis 客户端。我正在使用 websocket 消息处理程序动态订阅 redis 频道。 websocket 消息的有效负载包含一个我用来创建通道名称的 ID。例如 lobby:${lobbyID}:joined
。
订阅此频道工作正常,发布到该频道时会收到消息。
但我遇到的问题是我想一次性取消订阅该频道。我通过阅读 redis-documentation 的假设是我会使用 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 数组,并在 statuses:${userID}
上为每个用户创建了一个订阅,并在 statuses:*
上尝试了一个 punsubscribe
,但没有任何成功。
我是不是做错了什么,或者这是一个与 node-redis 相关的问题?我正在使用 redis 版本 2.8.0
我注意到有两种不同类型的订阅。关于渠道和模式。在我的问题中,我订阅了一个频道,并取消订阅了一个模式,这两个不是 'compatible',所以这是行不通的。
我使用 nc
来调试它,因为 redis-cli
在进入订阅状态时不允许其他命令。