2017-02-16 4 views
3

私はNode.js、Socket、io、Redisを使ってリアルタイムアプリケーションを開発しています。私はワーカーから1つのクライアントにプライベートメッセージを送信しようとしますが、動作しません。配列io.sockets.connectedワーカーのが空で、クライアントを参照できません。マスターのsocket.io-redisからプライベートメッセージ(emit)を送信するには

コード:私は間違って何をやっている

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

io.sockets.adapter.clients:

接続されたソケットを取得するには、呼び出す必要があり Socket.IOの各ソケットはランダム、推測できない、ユニークな識別子ソケット#idによって識別されます。あなたの便宜のために、各ソケットはこのIDで識別される部屋に自動的に参加します。 ワーカーコード:io.to(id).emit( 'チャットメッセージ'、 'ワーカーからのプライベートメッセージのテスト'); –

答えて

0

あなたのワーカーは接続されているソケットについて何も知らないので、アダプタから取得する必要があります(この場合はRedisです)。私は道を見つけた

関連する問題