2017-02-16 4 views
3

Ich entwickle eine Echtzeit-Anwendung mit Node.js, Socket, io, Redis. Ich versuche, eine private Nachricht an einen Client vom Worker zu senden, aber es funktioniert nicht. Array io.sockets.connected auf Worker ist leer und ich kann nicht auf den Client verweisen.So senden Sie private Nachricht (emit) von socket.io-redisis

-Code auf Master:

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) {}); 
}); 

-Code auf Arbeiter:

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

Was mache ich falsch?

+0

ich einen Ausweg gefunden: Jeder Sockel in Socket.IO durch einen Zufallsgenerator, unguessable, eindeutige Kennung Sockel # id identifiziert wird . Zu Ihrer Bequemlichkeit tritt jeder Socket automatisch einem Raum bei, der durch diese ID identifiziert wird. Worker-Code: io.to (ID) .emit ('Chat-Nachricht', 'Test private msg from worker'); –

Antwort

0

Da Ihr Mitarbeiter nichts über die verbundenen Sockets weiß, müssen Sie sie von dem Adapter erhalten, der in diesem Fall Redis ist.

Um angeschlossenen Steckdosen erhalten Sie anrufen müssen: io.sockets.adapter.clients

Verwandte Themen