如何在Express / Node中停止执行请求处理功能?

时间:2014-08-20 09:02:46

标签: javascript node.js function express

我有一台Express服务器,它提供一些计算作为Web服务。

计算时间范围从<1s到10s。

当有新请求进来时,有没有办法停止执行请求处理函数(这是其中一项计算)?

基本上,问题是:有没有办法在Javascript中停止执行函数? 如果没有,有没有办法可以终止处理Express请求的线程? 如果没有,你会建议什么?

1 个答案:

答案 0 :(得分:0)

你做不到。 JavaScript,包括Node.js,本质上是单线程的。如果CPU绑定函数正在运行,则没有任何内容可以中断它。

运行这些计算的更好方法是分叉另一个进程来运行它们,然后可以停止它们。例如:

fibo.js

function fibo(n) { // intentionally naive cpu-bound computation
  return n > 1 ? fibo(n - 1) + fibo(n - 2) : 1;
}

process.on('message', function(n) {
  process.send(fibo(n));
});

server.js

var http = require('http'), cp = require('child_process');
var fibo;

http.createServer(function(req, res) {
  if(fibo) {
    fibo.kill();
    fibo = null;
    res.end('terminated');
  } else {
    fibo = cp.fork('./fibo.js');
    fibo.on('message', function(n) {
      res.end(n);
    });
    fibo.on('exit', function() {
      res.end('terminated by other request');
    });
    fibo.send(50);
  }
}).listen(8000);

这只是一个例子。请不要按原样使用。此服务器只能处理实际计算内容的一个并发请求,child_process.fork 轻量级。