Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何从socket.io-redis发送私有消息(发出)_Node.js_Sockets_Socket.io_Node Cluster_Socket.io Redis - Fatal编程技术网

Node.js 如何从socket.io-redis发送私有消息(发出)

Node.js 如何从socket.io-redis发送私有消息(发出),node.js,sockets,socket.io,node-cluster,socket.io-redis,Node.js,Sockets,Socket.io,Node Cluster,Socket.io Redis,我正在使用Node.js、Socket、io和Redis开发一个实时应用程序。我试图从worker向一个客户端发送一条私人消息,但它不起作用。worker上的Arrayio.sockets.connected为空,无法引用客户端 主机上的代码: var io = require('socket.io')(30042); //socket.io(<port>) will create a http server var redis = require('socket.io-redis'

我正在使用Node.js、Socket、io和Redis开发一个实时应用程序。我试图从worker向一个客户端发送一条私人消息,但它不起作用。worker上的Arrayio.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) {});
});

我做错了什么?

因为您的工作人员对连接的套接字一无所知,所以您需要从适配器(本例中为Redis)获取它们

要连接套接字,您需要调用:
io.sockets.adapter.clients

我找到了一个解决方法:Socket.io中的每个套接字都由一个随机的、不可用的唯一标识符Socket#id标识。为了方便起见,每个套接字自动加入一个由该id标识的房间。工作代码:io.to(id).emit('chat message',Test private msg from Worker');
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');