Node.js Socket io redis pub / sub не отправляет события - PullRequest
0 голосов
/ 20 февраля 2020

У меня следующие настройки:

Два сервера B и C на одном хосте.

Клиент A имеет доступ к серверу B. Сервер C может быть доступ осуществляется только с определенных диапазонов IP-адресов, и клиент A не должен иметь к нему доступа.

Теперь сервер B использует чат на основе socket.io - когда клиент отправляет сообщение в этот чат, я добавляю это сообщение mon go и передайте сообщение обратно клиенту, чтобы оно появилось на его веб-странице.

Теперь я должен сделать следующее: когда клиент отправляет сообщение в чате B на стороне сервера. я должен передать это сообщение на сервер C, частные клиенты сервера C также подключены к чату сервера C через socket.io, поэтому, когда клиент A пишет на сервер B, он должен получить сообщение от сервера C на веб-странице и наоборот. Когда частный клиент сервера C отправляет сообщение на сервер C chat, оно должно передаваться B, а B должно передавать его подключенному пользователю (по имени пользователя).

Я пытался сделать это через модуль socket.io-redis, что я сделал, я установил Redis и запустил его, затем я использовал такой код:

SERVER B:

    const sharedsession = require("express-socket.io-session");
app.set('port', '3000');

    /**
     * Create HTTP server.
     */

    var server = http.createServer(app);

    var io = require('socket.io')(server,{
      transports: ['polling']
    });
    const redisAdapter = require('socket.io-redis');
    const Redis = require('ioredis');

    const startupNodes = [
      {
        port: 6379,
        host: 'localhost'
      }
    ];

    io.adapter(redisAdapter({
      pubClient: new Redis(startupNodes),
      subClient: new Redis(startupNodes)
    }));


    io.use(sharedsession(sess));
    io.emit('hi!','text');

SERVER C:

const sharedsession = require("express-socket.io-session");
app.set('port', '3002');

/**
 * Create HTTP server.
 */

var server = http.createServer(app);

var io = require('socket.io')(server,{
  transports: ['polling']
});
const redisAdapter = require('socket.io-redis');
const Redis = require('ioredis');

const startupNodes = [
  {
    port: 6379,
    host: 'localhost'
  }
];

io.adapter(redisAdapter({
  pubClient: new Redis(startupNodes),
  subClient: new Redis(startupNodes)
}));


io.use(sharedsession(sess));
io.on('hi!',function(txt) {
   console.log(txt);
});
io.on('connection',function(socket){
    socket.on('hi!',function(txt) {
         console.log(txt);
    });
});

Сначала я запускаю сервер C, затем сервер B. Насколько я понимаю, я должен получить io.on('hi!',function(txt), но по какой-то причине этого не происходит. Где моя ошибка, может кто-то помочь, как соединить два серверных приложения на localhost, используя socketio и redis?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...