在Node.js中(我是新手)我正在尝试在收到响应后执行一系列任务。但是,我想尽可能快地做出响应。我不需要将这些任务的结果返回给客户端,所以我试图立即返回响应。发送回复并继续执行Express |任务Node.js
我当前实现大致是:
var requestTime = Date.now;
app.post('/messages', function (req, res) {
console.log("received request");
// handle the response
var body = res.body;
res.send('Success');
res.end();
console.log("sent response");
performComplexTasks(body)
})
function performComplexTasks(body){
// perform data with body data here;
console.log("finished tasks:", Date.now()-requestTime, "ms");
}
// -------LOG-----------
// received request
// POST /api/messages 200 3.685 ms - 59
// sent response
// finished tasks: 2500ms
客户端发出请求似乎挂起,直到performComplexTasks()完成。 (POST
在3.685ms内完成,但响应需要2500ms才能完成。)
有没有办法立即发送响应并完成其他任务而无需客户端等待/挂起? (在我的情况下,客户端不能进行多个API调用。)
你应该工作得很好吗?只要响应在服务器上结束,那么之后会发生什么情况不应该影响浏览器。 – adeneo
@adeneo我已经在本地使用CURL测试了它,并且响应需要在“200-15000ms”之间。当我注释掉'performComplexTasks(body)'时,响应花费大约10ms。所有其他API端点(没有长时间任务)似乎更快。这可能是因为一个独立的问题(即我的服务器CPU使用率,而不是正确处理'req','res')?如果是这样,你有什么建议我应该开始调查? –
@adeneo另外,万一它很重要,这个端点将被另一个服务器(而不是浏览器)调用。 –