2017-11-16 18 views
0

こんにちは私はソケットioを使用してdbからユーザー通知を取得しようとしています。ここ は、私がデータを取得し、利用者にそれらを送り返すしようとしている方法です更新通知をsocket.ioと一緒に使用

if(req.user) { 
    req.io.sockets.on('connection', function(socket){ 
    setInterval(getNotf,1000) 
    function getNotf() { 
    User.findOne({email:req.user.email}) 
    .then(user=>{ 
     messages=(user.notifications); 
     console.log(messages) 
        socket.emit('output', messages); 
}); 
    } 

}); 

} その方法の問題点は、すべての接続users.howに送信されたメッセージは、私が唯一、現在に送ることができるということですユーザー?

答えて

0

あなたは、そのIDを使用して、この接続部を有するソケットにメッセージを発することができる。

io.to(socket.id).emit('output', messages) 

あなたの接続イベントリスナー内:

req.io.sockets.on('connection', function(socket){ 
    setInterval(getNotf,1000) 
    function getNotf() { 
    User.findOne({email:req.user.email}) 
    .then(user=>{ 
     messages=(user.notifications); 
     console.log(messages) 
        io.to(socket.id).emit('output', messages) 
}); 

を私はこのような接続のためのグローバルインスタンスを持っています:

var serverhttp = http.createServer(<optionshttp>, app).listen(<port>); 
var io = require('socket.io').listen(serverhttp); 

2接続のテストでは、これを試すことができます:

 var clients = []; 

      req.io.sockets.on('connection', function(socket){ 
       clients.push(socket.id); 
       setInterval(getNotf,1000) 
       function getNotf() { 
       User.findOne({email:req.user.email}) 
       .then(user=>{ 
        messages=(user.notifications); 
        console.log(messages) 
        console.log("socket ID :",socket.id) 
        io.to(clients[0]).emit('output', "user1") 
        io.to(clients[1]).emit('output', "user2") 
    //or 
    //io.sockets.connected[clients[0]].emit('output', "user1") 
    //io.sockets.connected[clients[1]].emit('output', "user2") 

      }); 
+0

iは、ユーザが接続されている場合にも、そのメッセージは –

+0

があなたの接続のためsocket.idをログに記録しようとすることができる他の接続にも送られたことを試してみました、はconsole.log(「ソケットID:」、socket.id )。この複数の接続の使用例をどのようにテストするか教えてください。 –

+0

ここにクライアント上のコード var socket = io.connect(); socket.on( "出力"、データ=> { $( "#の一時")。テキスト(data.length) はconsole.log(データ) }私はこれを行うをお願いします が正しい? –

関連する問題