Node-Redis使用自定义消息进行psubscribe

时间:2015-04-23 01:14:46

标签: node.js redis

我的印象是使用这个库:

https://github.com/mranney/node_redis

可以这样做:

var redis = require('redis');

var pub = redis.createClient();
var sub = redis.createClient();

sub.psubscribe('channel');

sub.on('message from channel', function(){});

pub.publish('channel','a message xyz');

问题是我似乎无法让sub.on()接收特定的自定义消息。似乎被解雇的唯一入口点是sub.on('message')sub.on('pmessage'),但如何才能调用sub.on('my custom message')?希望这是有道理的。

1 个答案:

答案 0 :(得分:3)

这就是节点redis客户端的工作原理。它会保留messagepmessage个事件,以便分别通知您SUBSCRIBEPSUBSCRIBE个事件。

https://github.com/mranney/node_redis#publish--subscribe

但是如果你想要一个类似你的代码中的语法,你可以随时定义自己的消息格式和EventEmitter,这样的话可能是这样的:

var events = require('events');
var redis = require('redis');
var pub = redis.createClient();
var sub = redis.createClient();

var ee = new events.EventEmitter();

ee.on('aweomseEvent', function() {
    console.log('party!');
});

sub.on('subscribe', function() {
    var message = {
        type: 'aweomseEvent',
        isAwesome: true
    };
    pub.publish('mychannel', JSON.stringify(message));
});

sub.subscribe('mychannel');
sub.on('message', function(channel, message) {
    var deserialized = JSON.parse(message);
    if (deserialized.type) {
        ee.emit(deserialized.type, deserialized);
    }
});