Как я могу синхронизировать общее количество клиента socket.io на обоих серверах в узле js

Я использую версию узла js 4.2.6 и версию 1.4.5 socket.io. Я использую модуль socket.io-redis в качестве адаптера для socket.io. У меня два сервера с портами 3000 и 4000. Я добавил таймер для печати общего количества сокетов подключения, как показано ниже.

var socketio = require('socket.io')
var redis = require('socket.io-redis'),
io=socketio.listen(server); 
io.adapter(redis({ host: '127.0.0.1', port: 6379 }));
setInterval(function() {
                console.log("The total sockets are:::::::::::::", Object.keys(io.sockets.connected).length);
            }, 5000 );

На одном сервере я получаю правильное количество клиентов, но на другом я получаю 0. Как можно синхронизировать клиенты socket.io между сервером.

2 ответа

При использовании https://github.com/socketio/socket.io-redis нужно сделать много вещей:

  1. io.adapter.remoteJoin (socket.id, 'room_name_1', function (){}) // добавить клиента в комнату
  2. io.adapter.allRooms(function (err, rooms) {}) // получить всю комнату
  3. io.adapter.clients (комнаты, функции (ошибки, клиенты){}) // клиенты.счет длины общее количество клиентов во всей комнате.

Ваш код io.sockets.connected просто считается на одном сервере (компьютер / машина)

Вы должны создать Socket Model и сохранить данные (в Mongo или Redis... независимо от того, что вы используете), чтобы оба экземпляра сервера могли запрашивать и получать доступ к этой информации должным образом.

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