Redis和套接字仅发送给部分客户端

1 投票
2 回答
583 浏览
提问于 2025-04-18 06:24

我有一个这样的服务器,使用的是 node.js

socket.on('connection', function(client) {
        const subscribe = redis.createClient(6379, '127.0.0.1')

        subscribe.psubscribe('kitchen_*');

        subscribe.on("pmessage", function(pattern, channel, message) {
            client.emit(channel, message);
            log('msg', "received from channel #" + channel + " : " + message);
        });
});

在客户端,我是这样做的:

socket.on('kitchen_companyName', function (data) {
        console.log('received a message: ', data);
      });

现在我想在客户端只接收 kitchen_companyName 的消息,但即使公司名称是 kitchen_hello,我还是收到了消息。我是通过 Python 使用 pyredis 发布到 Redis 的。

r = redis.StrictRedis(host='localhost', port=6379)
r.publish('kitchen_'+request.user.user_company, message)

2 个回答

0

你的订阅是针对所有以 "kitchen_" 开头的频道,注意你在订阅命令中的那个 *

所以,任何发布到以 "kitchen_" 开头的频道的消息都会发送给你的订阅者。

如果你把订阅消息改成 "kitchen_companyName",那么你只会收到这个频道的消息。

请注意,你可以让一个客户端订阅多个频道。

0

你可以试着加一个条件,来检查频道,然后只向那个频道发送信息。

subscribe.on("pmessage", function(pattern, channel, message) {
    if(channel == "kitchen_companyName") {
      client.emit(channel, message);
      log('msg', "received from channel #" + channel + " : " + message);
    }
});

撰写回答