在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另外,萬一它很重要,這個端點將被另一個服務器(而不是瀏覽器)調用。 –