2017-02-16 129 views
3

我正在开发一个使用Node.js,Socket,io,Redis的实时应用程序。我尝试从工作人员向一个客户端发送私人消息,但它不起作用。阵列io.sockets.connected工作人员是空的,我不能引用客户端。在主如何从socket.io-redis发送私人消息(发出)

代码:

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

我在做什么错了:对工人

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

码?

+0

我找到了出路: 在Socket.IO每个插座是由随机的,不可猜测,唯一标识符插槽#id标识。为了您的方便,每个套接字都会自动加入由此ID标识的房间。 工作人员代码:io.to(id).emit('聊天消息','从员工测试私人消息'); –

回答

0

由于您的工作人员对连接的套接字不了解,因此您需要从适配器(在本例中为Redis)中获取它们。

可以连接插座,你需要调用: io.sockets.adapter.clients