【问题标题】:Node-Redis psubscribe with custom messages带有自定义消息的 Node-Redis psubscribe
【发布时间】:2018-08-18 02:33:08
【问题描述】:

我的印象是使用这个库:

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') 被调用?希望这是有道理的。

【问题讨论】:

  • 这不是该模块的工作方式。如果您需要这样做,则必须编写代码来执行此操作。

标签: node.js redis


【解决方案1】:

这就是 node 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);
    }
});

【讨论】:

    猜你喜欢
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多