gpt4 book ai didi

node.js - 在释放 mysql 连接之前返回是否允许通过垃圾收集释放所述连接?

转载 作者:太空宇宙 更新时间:2023-11-03 23:39:38 24 4
gpt4 key购买 nike

我的问题涉及从 Node 内释放 mysql 连接。

如果我在连接释放之前返回,该连接是否仍会保留,或者垃圾收集会为我处理该连接吗?

我问的原因是,我曾经遇到过一个问题,后续连接被拒绝,因为我使用了整个连接池而没有释放它们。

这样做似乎不会出现问题,所以我只是想在可能的情况下进行一些澄清。

提前致谢。

格兰特。

    sql.getConnection(function (err, connection) {
if (err) {
res.send(4xx,"error");
return;
}

if (req.body.premium) {
//try premium first
//code snipped
return;
}

//code snipped
connection.release();
});

最佳答案

数据库连接不太可能在 JavaScript 中进行垃圾回收,因为这需要相当低级别的集成到 JS 引擎中。

除此之外,只要传递给 .getConnection() 的回调尚未被调用,在代码中创建的闭包仍然有效,即使您已从原始函数调用返回,该闭包内的任何变量都不会被垃圾收集。这是 javascript 使用异步操作时的一个重要特性,在异步编程中得到广泛应用。

<小时/>

看起来您确实有多个代码路径不会释放连接,因为在调用 connection.release(); 之前您有两个 return 语句,因此在我看来,这两个路径都像是您无法正确释放连接的代码中的一种方式(这与垃圾收集无关)。

如果您未能释放连接,则该连接将在池中不可用,并且无法被其他调用者使用,并且您可能会耗尽池连接。

垃圾收集不会为您解决这个问题。您必须确保所有代码路径在完成后都释放连接。否则,您将“泄漏”连接,并且您的连接池最终将耗尽连接。

关于node.js - 在释放 mysql 连接之前返回是否允许通过垃圾收集释放所述连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26220119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com