Redis和套接字仅发送给部分客户端
我有一个这样的服务器,使用的是 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);
}
});