В 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.685 мс, но ответ занимает 2500 мс.)
Есть ли способ отправить ответ немедленно и выполнить другие задачи, не ожидая, что клиент будет ждать/висеть? (В моем случае клиент не может совершать несколько вызовов API.)
Что вам нужно, чтобы нормально работать? До тех пор, пока ответ будет завершен на сервере, что происходит после этого не должно влиять на браузер. – adeneo
@adeneo Я тестировал это, используя CURL локально, и ответ берется между '200-15000ms'. Когда я комментирую 'performComplexTasks (body)' ответ занимает около 10 мс. Все остальные конечные точки API (без длинных задач) кажутся более быстрыми. Может ли это быть из-за независимой проблемы (т. Е. С использованием моего центрального процессора вместо правильной обработки 'req',' res')? Если да, есть ли у вас предложения о том, где я должен начать расследование? –
@adeneo Кроме того, в случае, если это имеет значение, эта конечная точка будет вызываться другим сервером (а не браузером). –