我在许多网络语言中看到的一个常见问题是数据库连接需要关闭,否则总连接数逐渐增加,然后以任何形式停止。
HTTP是无状态的,当请求完成处理时,为什么这些语言不能删除请求打开的任何连接?你有什么理由可以保持开放吗?
答案 0 :(得分:4)
因为打开,验证和授权访问数据库的成本非常昂贵。这就是为什么通常每个人都使用数据库连接池。当请求处理程序从池中获取可用已打开的连接时,连接仍处于打开状态。当一个人关闭连接时,实际发生的是连接被释放以供其他人使用。
回答......
为什么这些语言不能放弃 请求打开的任何连接? 有合理的理由吗? 为什么你可以保持开放?
请求完成后,Connections可能会保持打开状态并用于其他目的。例如,数据的异步更新。但是我和你在一起,在90%的情况下,当请求完成时,打开的连接应该返回到池中。根据您使用的Web框架(Spring,DJANGO,...),可以配置或至少实现这种行为。
答案 1 :(得分:0)
关闭http连接时检查打开连接会产生更多开销,所以我猜这就是为什么有些语言默认不关闭它。
如果你没有明确地关闭它,它必须由垃圾收集器完成,这可能需要一段时间。