Node.js listen to session variable change and trigger server-sent event

后端 未结 2 800
粉色の甜心
粉色の甜心 2021-01-24 00:34

I am writing a webapp, using express.js.

My webapp achieves the following

  1. User posts 100 json objects
  2. Each json object is processed via a service
2条回答
  •  轻奢々
    轻奢々 (楼主)
    2021-01-24 01:16

    I came up with a solution please let me know if this is the right way to do stuff ?

    Will this solution work across sessions ?

    Server side Code

    var events = require('events');
    var progressEmitter = new events.EventEmitter();
    
    exports.cleanseMatch = function(req, res)
    {
        console.log('cleanseMatch Inovked');
        var progressTrigger = new events.EventEmitter;
        var id = '';
        var i = 1;  
    
         id = setInterval(function(){
            req.session.percentage = (i/10)*100;
            i++;
            console.log('PCT is: ' + req.session.percentage);
            progressEmitter.emit('progress',req.session.percentage)
    
            if(i == 11) {
            req.session.percentage = 100;
            clearInterval(id);              
            res.json({'data':'test'});
            }
        },1000);
    }
    
    exports.progress = function(req,res)
    {
        console.log('progress Inovked');
        // console.log('PCT is: ' + req.session.percentage);
    
        res.writeHead(200, {'Content-Type': 'text/event-stream'});
        progressEmitter.on('progress',function(percentage){
             console.log('progress event fired for : ' + percentage);
             res.write("event: progress\n");
             res.write("data: "+percentage+"\n\n");
        });
    }
    

    Client Side Code

    var source = new EventSource('progress');
    source.addEventListener('progress', function(e) {
        var percentage = JSON.parse(e.data);
        //update progress bar in client
        App.updateProgressBar(percentage);
    }, false);
    

提交回复
热议问题