SocketIo и Redis Multiple Emit Handling - PullRequest
       7

SocketIo и Redis Multiple Emit Handling

0 голосов
/ 22 октября 2018

Я пытаюсь создать систему уведомлений, которая хранит и отображает уведомления в реальном времени для пользователей, но я не могу понять, как хранить и отображать более одного уведомления для отдельного пользователя с моим текущим 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#/#"

1 Ответ

0 голосов
/ 23 октября 2018

В настоящее время вы отправляете только одно уведомление при подключении клиента.Чтобы отправлять уведомления для каждого события client-notification, используйте что-то вроде этого:

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;

        socket.emit('notification', userNotification);
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...