Node.js / express: respond immediately to client request and continue tasks in nextTick

前端 未结 3 2055
情歌与酒
情歌与酒 2021-02-06 09:20

I would like to separate server high consuming CPU task from user experience:

./main.js:

var express = require(\'express\');
var Test = require(\'./resou         


        
3条回答
  •  盖世英雄少女心
    2021-02-06 09:58

    Thakns for Peter Lyons help, finally the main problem was firefox buffer: response was not so long as to flush it (so firefox kept waiting).

    Anyway, for hight CPU performing tasks, node would keep hanged until finishing, so will not be attending new requests. If someone needs it, it can be achieved by forking (with child_process, see sample in http://nodejs.org/api/child_process.html)

    Have to say that change of context by forking could take longer than splitting the task in different ticks.

    ./resources/test.js:

    var child = require('child_process');
    function Test() {}
    module.exports = Test;
    
    Test.testAsync = function(req, res) {
      res.send(200, "Hello world, this should be sent inmediately");
      var childTask = child.fork('child.js');
      childTask.send({ hello: 'world' });
    };
    

    ./resources/child.js:

    process.on('message', function(m) {
      console.log('CHILD got message:', m);
    });
    

提交回复
热议问题