我有一个机票预定请求处理程序:
route.post('/makeBooking', (req, res) => {
// Booking code
setTimeout(function () {
// Checks if the payment is made, if not then cancels the booking
}, 900000);
});
现在我有一条路线可以进行预订,如果15分钟内未付款,超时功能将取消预订。
此功能会导致任何与性能相关的问题或内存泄漏吗?
答案 0 :(得分:4)
此功能会导致任何与性能相关的问题...
不,它不会,至少不会单独存在。 ipow(10,9)
等待调用它的回调时,它是non-blocking。该呼叫仅添加到队列中。在将来的某个时候,将触发回调并将呼叫从该队列中删除。
同时,您仍然可以处理内容。
...还是内存泄漏?
setTimeout
回调位于闭包内。 setTimeout
调用回调后,它就有资格进行垃圾回收。
除非您在900000ms的时间内获得了数百万的预订,否则您无需担心。当然,数量取决于内存 您分配给Node.js应用程序的大小。
当然,如果您确实每秒收到那么多请求,那么您还有其他更重要的事情要担心。
答案 1 :(得分:1)
它不会出现性能问题或内存泄漏问题,但是使用15分钟的超时功能可能会给调试和维护带来麻烦。
特别是诸如取消预订之类的问题应通过另一种方式解决。
您始终应该以以下方式编写节点应用程序:
因此,假设您已经在预订过程中使用数据库,那么您还应该在数据库中进行15分钟的计时。