Node.js / express: natychmiast odpowiedz na żądanie klienta i kontynuuj zadania w nextTick

Chciałbym oddzielić zadanie serwera o dużym zużyciu procesora od doświadczenia użytkownika:

./main.js:

var express = require('express');
var Test = require('./resources/test');
var http = require('http');
var main = express();

main.set('port', process.env.PORT || 3000);
main.set('views', __dirname + '/views');
main.use(express.logger('dev'));
main.use(express.bodyParser());
main.use(main.router);

main.get('/resources/test/async', Test.testAsync);

main.configure('development', function() {
  main.use(express.errorHandler());
});

http.createServer(main).listen(main.get('port'), function(){
  console.log('Express server app listening on port ' + main.get('port'));
});

./resources/test.js:

function Test() {}
module.exports = Test;

Test.testAsync = function(req, res) {
  res.send(200, "Hello world, this should be sent inmediately");
  process.nextTick(function() {
    console.log("Simulating large task");
    for (var j = 0; j < 1000000000; j++) {
      // Simulate large loop
    }
    console.log("phhhew!! Finished!");
  });
};

Podczas żądania „localhost: 3000 / resources / test / async” oczekiwałbym, że renderowanie przeglądarki „Hello world, to powinno być wysłane natychmiast” naprawdę szybko i node.js, aby kontynuować przetwarzanie, a po chwili w konsoli pojawia się „gotowy” komunikat .

Zamiast tego przeglądarka czeka, aż node.js zakończy duże zadanie, a następnie wyświetli treść. Próbowałem zres.set({ 'Connection': 'close' }); i równieżres.end(); ale nic nie działa zgodnie z oczekiwaniami. Również nie mam szczęścia.

Jak powinno być natychmiastowe wysłanie odpowiedzi do klienta, a serwer kontynuował zadania?

EDYTOWAĆ

opublikowano metodę rozwidlenia w rozwiązaniu

questionAnswers(3)

yourAnswerToTheQuestion