Я пытаюсь реализовать шаблон публикации/подписки в Node, но без Redis. Функциональность должна быть одинаковой; вы можете опубликовать канал, подписаться на канал и слушать данные, если вы подписались; вот функции Redis:
pub.publish('channel1', myData1, function (err, data) {
});
sub.subscribe('channel1', function (err, data) {
});
sub.on("message", function (channel, data) {
//Now you are easily listening to data
});
Я пробовал следующее, что может быть не очень хорошим способом (я просто показываю свою попытку!); У меня есть собственный объект канала, в котором я сохраняю каналы и функции, которые необходимо запускать, когда мы публикуем новые данные на определенном канале; так что, как вы видите, я подписываюсь на функции каналов; но я не знаю, могу ли я как-то прослушивать данные, как это делает Redis sub.on("message",function(){...
! Не могли бы вы помочь мне, если я могу сделать это так же, как Redis, но с eventEmitter или...
var events = require('events');
var emitter = new events.EventEmitter;
var channels = {};
//channels ={"channelA": ["func1", "func2"], "channelB": []}
//publish data to a channel and emits all of the functions which are registered for listening to the channel
function publish(channel, data, callback) {
if (channels[channel] && channels[channel].length > 0) {
for (var i = 0; i < channels[channel].length; i++) {
emitter.emit(channels[channel][i], data);
}
}
callback();
}
//subscribe a function to a channel
function subscribe(channel, FuncName, next) {
if (!channels[channel]) {
channels[channel] = [];
}
channels[channel].push(FuncName);
next();
}
//Subscribe a callback function from a channel
function unsubscribe(channel, FuncName) {
if (channels[channel]) {
var indx = channels[channel].indexOf(FuncName);
if (indx != -1) {
channels[channel].splice(indx, 1);
}
}
}