2015-04-23 45 views
2

我的印象是,使用這個庫:節點Redis的psubscribe與自定義消息

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

這只是並不怎麼該模塊作品。如果你需要這樣做,你將不得不編寫代碼來完成它。 –

回答

2

這就是節點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); 
    } 
});