@devback/redis
v1.0.3
Published
Дополненный модуль node_redis для работы с socket.io и перенаправления сообщений по процессам
Downloads
11
Readme
redis
Дополненный модуль node_redis для работы с socket.io и перенаправления сообщений по процессам
// подключение
const redis = require('@devback/redis');
createEmitter([userdata])
userdata
(object | null) данные пользователя для передачи с сообщениями
Создаем объект класса RedisEmitter и устанавливает данные пользователя для каждого сообщения
listen(channel, methods)
channel
(string) название каналаmethods
(object | function) объект где ключ название метода, а значение функция данного метода или функция
Слушает указанный канал и вызывает указанные методы с переданными данными. Если вместо методов была указана функция, то первым аргументом передается метод
middleware(channel, methods)
channel
(string) название каналаmethods
(object | function) объект где ключ название метода, а значение функция данного метода или функция
Слушает указанный канал и устанавливает промежуточные методы или функцию
которые/которая получает последним аргументом функцию next
чтобы передать выполнение дальше.
Если в next
передать ошибку первым аргументом,
то выполнение остановиться и будет выброшен евент middleware-error
const redis = {
pub: require('@devback/redis').createClient(...),
sub: require('@devback/redis').createClient(...)
};
// устанавливаем промежуточную функцию для валидации data
redis.sub.middleware('chat/global', function(method, userdata, data, next) {
if(Object(data) !== data || typeof(data.msg) !== 'string') {
return next(new Error('Неправильный формат сообщения'));
}
next();
});
// если сообщение дошло до listen, значит оно прошло все промежуточные функции успешно
redis.sub.listen('chat/global', {
message: function(userdata, data) {
console.log(userdata.userid); // будет 1
console.log(data.msg); // будет "Hi!"
}
});
// также можно слушать все сообщения одного канала
redis.sub.listen('chat/global', function(method, userdata, data) {
});
// или устанавливать промежуточную функцию только для одного метода
redis.sub.middleware('chat/global', {
message: function(userdata, data, next) {
}
});
// если одна из промежуточных функций вернула ошибку, то выбрасывается данная ошибка
redis.sub.on('middleware-error', function(err, obj) {
// пример ошибки:
// err = 'Неправильный формат сообщения'
// obj = {
// method: 'message',
// userdata: {
// userid: 1
// },
// data: {
// msg: 'Hi!'
// }
// }
});
setTimeout(function() {
let emitter = redis.pub.createEmitter({
userid: 1
});
emitter.send('chat/global', 'message', {
msg: 'Hi!'
});
}, 100);
RedisEmitter
Класс который позволяет передавать сообщения по каналам redis с использованием методов
send(channel, method, data[, callback])
channel
(string) название каналаmethod
(string) метод который будет вызываться на том конце для этого сообщенияdata
(mix) данные что нужно передатьcallback
(function) функция обратного вызова, которая будет передаваться во функцию publish
Отправляет сообщение по указанному каналу и с указанным методом и данными
redirect(channel, method)
channel
(string) название каналаmethod
(string) метод который будет вызываться на том конце для этого сообщения
Перенаправляет сообщения от евентов (socket.io или другие) по указанному каналу и методу
io.on('connection', function(socket) {
// создаем RedisEmitter с данными которые нужно отправлять с каждым запросом
let emitter = redis.createEmitter({
socketid: socket.id,
userid: socket.uid,
lang: socket.lang
});
// создаем функцию перенаправления сообщений от сокета
socket.on('chat/global:message', emitter.redirect('chat/global', 'message'));
});