使用socket.io更新使用通知

时间:2017-11-16 10:49:56

标签: node.js websocket socket.io

你好我正在尝试使用socket io从db获取用户通知。  这是我如何尝试获取数据并将其发送回用户

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

});

} 这种方式的问题是发送给所有连接用户的消息。我可以只将它们发送给当前用户吗?

1 个答案:

答案 0 :(得分: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") 

            });