2017-02-16 19 views
3

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

Код на мастера:

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'); 

Что я делаю не так?

+0

Я нашел выход: Каждое гнездо в Socket.io определяется случайным, неопределяемых, уникальный идентификатор Оправа # ид , Для вашего удобства каждый сокет автоматически присоединяется к комнате, идентифицированной этим идентификатором. Рабочий код: io.to (id) .emit («сообщение чата», «Проверить личное сообщение от рабочего»); –

ответ

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^