我的印象是使用这个库:
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')
?希望这是有道理的。
答案 0 :(得分:3)
这就是节点redis客户端的工作原理。它会保留message
和pmessage
个事件,以便分别通知您SUBSCRIBE
和PSUBSCRIBE
个事件。
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);
}
});