Я пытаюсь создать систему уведомлений, которая хранит и отображает уведомления в реальном времени для пользователей, но я не могу понять, как хранить и отображать более одного уведомления для отдельного пользователя с моим текущим Socket-Ioи установка Redis.Частично причина, по которой я не могу этого достичь, может быть связана с моим отсутствием опыта работы с Redis и функциями Pub / Sub, но я не уверен, нужно ли мне вносить изменения в отношения SocketIo и Redis store или чтоэто то, что обычно обрабатывается вне этих модулей с помощью чего-то вроде массива.
Вот мой код на стороне сервера:
var redisAdapter = require('socket.io-redis');
var io = require("socket.io").listen(server);
io.adapter(redisAdapter({
host: process.env.REDIS_ENDPOINT || 'localhost',
port: 6379
}));
var userNotification = {};
io.sockets.on('connection', function(socket) {
io.of('/').adapter.clients((err, clients) => {
console.log("Socket IO Clients")
console.log(clients); // an array containing all connected socket ids
});
socket.emit('notification', userNotification);
//Client Notification
socket.on('client-notification', function(data) {
userNotification.data = data;
});
});
На стороне клиента:
$(document).ready(function() {
var socket = io.connect('http://localhost:3000');
socket.on('notification', function (data) {
console.log(data);
});
});
При текущей настройке генерируются следующие идентификаторы клиента сокета, но я не уверен, как интерпретировать.
1) Сессия начинается
[ 'GMs7nTrAHQ4z9o7KAAAC' ]
2) Пользовательотправляет форму запуска notification
[ 'GMs7nTrAHQ4z9o7KAAAC', 'e4U1kcC6Jg0Ey45IAAAD' ]
3) Страница обновляется или загружается новая страница.notification
теперь отображается на панели навигации
[ '_T8oFXhrUyfwWpjqAAAF' ]
Вот ответ от запуска PUBSUB CHANNELS
с помощью redis-cli:
1) "socket.io-response#/#"
2) "socket.io-request#/#"