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

Я использую версию node 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 между сервером.


person Soorya Prakash    schedule 02.08.2016    source источник
comment
Зачем тебе два сервера? Насколько я знаю, socket.io-redis не будет синхронизировать сокеты/соединения, это позволит вам получить доступ к клиентам, подключенным к разным серверам (которые обычно являются физическими серверами).   -  person robertklep    schedule 02.08.2016
comment
Не могли бы вы предоставить мне пример кода для подключения клиентов к разным серверам?   -  person Soorya Prakash    schedule 02.08.2016
comment
Я думаю, вам нужно будет реализовать некоторую координацию между вашими серверами, если вы хотите отслеживать общее количество подключенных клиентов.   -  person robertklep    schedule 02.08.2016


Ответы (2)


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

person Squivo    schedule 05.08.2016

При использовании 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(rooms, function (err, client) {})// client.length подсчитывает общее количество клиентов во всей комнате.

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

person tuananh    schedule 06.02.2017