Как отправить личное сообщение (отправить) из socket.io-redis

Я разрабатываю приложение в реальном времени с использованием Node.js, Socket, io, Redis. Пытаюсь отправить личное сообщение одному клиенту от воркера, но не получается. Массив io.sockets.connected на работнике пуст, и я не могу обратиться к клиенту.

Код на хозяине:

var io = require('socket.io')(30042); //socket.io(<port>) will create a http server
var redis = require('socket.io-redis');
io.adapter(redis({ host: 'localhost', port: 6379 }));
io.on('connection', function (socket) {
    io.sockets.connected[socket.id].adapter.remoteJoin(socket.id, 'new_room', function  (err) {});
});

Код на работника:

var SocketIO = require('socket.io');
var redis = require('socket.io-redis');
io = new SocketIO(); //start redis socket-io
io.adapter(redis({host: 'localhost', port: 6379})); // where your redis server is located

//send to all users in room - works perfectly
io.to('new_room').emit('chat message', 'Test global msg from worker');

//????
//dont work - io.sockets.connected is empty
io.sockets.connected['socket_id_from_master'].emit('chat message', 'Test private msg from worker');

Что я делаю неправильно?


person Michael Kors    schedule 16.02.2017    source источник
comment
Я нашел выход: каждый сокет в Socket.IO идентифицируется случайным, нераспознаваемым уникальным идентификатором Socket # id. Для вашего удобства каждая розетка автоматически присоединяется к комнате, идентифицированной этим идентификатором. Код рабочего процесса: io.to (id) .emit ('сообщение в чате', 'Проверить частное сообщение от рабочего');   -  person Michael Kors    schedule 17.02.2017


Ответы (1)


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

Для подключения сокетов необходимо вызвать: io.sockets.adapter.clients

person Cédric Escher    schedule 22.06.2017