Как я могу синхронизировать общее количество клиента 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 нужно сделать много вещей:
- io.adapter.remoteJoin (socket.id, 'room_name_1', function (){}) // добавить клиента в комнату
- io.adapter.allRooms(function (err, rooms) {}) // получить всю комнату
- io.adapter.clients (комнаты, функции (ошибки, клиенты){}) // клиенты.счет длины общее количество клиентов во всей комнате.
Ваш код io.sockets.connected просто считается на одном сервере (компьютер / машина)
Вы должны создать Socket Model и сохранить данные (в Mongo или Redis... независимо от того, что вы используете), чтобы оба экземпляра сервера могли запрашивать и получать доступ к этой информации должным образом.