Задать вопрос

Как масштабировать чат написанный на socket.io/nodejs?

Здравствуйте!

Я написал некое подобие чата на socket.io и хочу его масштабировать на два сервера.

Прочитал вот это this: socket.io/docs/using-multiple-nodes/#passing-event... настроил nginx и теперь клиент попадает на один из этих серверов.

Проблема в том что я использую переменную в каждом socket.io инстансе для того чтобы хранить список людей в комнате и названия этих комнат.

Если один человек подключился к одному инстансу, а другой к другому то они друг друга не видят.

Из вышеприведенной статьи прочитал про redis adpter. Я думал что я добавлю эти строки и мои два инстанса будут синхронизированы через redis. Но этого не произошло.

Вот мой код:

//FIRST SERVER (server1.js)

var io = require('socket.io')(3000);
var redis = require('socket.io-redis');
io.adapter(redis({ host: 'localhost', port: 6379 }));

var test = 0;

io.on('connection', function (socket) {
    test+=1;
    console.log("connection. test = " + test);
});

//SECOND SERVER (server2.js)


var io = require('socket.io')(4000);
var redis = require('socket.io-redis');
io.adapter(redis({ host: 'localhost', port: 6379 }));

var test = 0;

io.on('connection', function (socket) {
    test+=1;
    console.log("connection. test = " + test);
});

Когда клиент подключается к server1.js (port 3000) - я вижу 'connection. test = 1', это хорошо, но консоль в которой запущен второй инстанс остается пустой. Я хочу чтобы второй инстанс делал тоже самое (печатал 'connection = 1').

Что я делаю не так? Может кто нибудь знает где можно увидеть пример использования socket.io-redis

Спасибо
  • Вопрос задан
  • 3882 просмотра
Подписаться 6 Оценить Комментировать
Решение пользователя Mak1012 К ответам на вопрос (2)
@Mak1012
А не проще использовать один Redis сервер?
Ответ написан