socket.io - передача событий между узлами

Я был вдохновлен этим: http://socket.io/docs/using-multiple-nodes/, и прямо сейчас я хочу синхронизировать мои два экземпляра socket.io через адаптер 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 (порт 3000) - я вижу 'соединение. test = 1', это хорошо, но консоль второго сервера все еще чистая. Я хочу, чтобы второй сервер (порт 4000) сделал то же самое (выведите "connection = 1").

Что я делаю не так? Можете показать пример использования адаптера?

Спасибо

1 ответ

Решение

Если вы подключаетесь только к server1:3000 нет никакого способа io.on('connection', ...) будет срабатывать на server2:4000 - в конце концов, вы не подключены к этому серверу.

Каждый клиент будет подключаться только к одному из ваших серверов. Если вы не используете адаптер Redis, клиенты, подключенные к разным серверам, не смогут обмениваться данными. Теперь с помощью адаптера Redis серверы узнают о клиентах друг друга и могут передавать сообщения всем подключенным клиентам всех серверов.

Другие вопросы по тегам