【发布时间】:2020-09-03 21:45:25
【问题描述】:
简而言之,我正在使用 socket.io 创建一个聊天服务,我想知道我是否应该关闭 mysql 连接,然后在我必须使用它时重新打开它。此聊天服务每秒可能会收到 10-20 个事件。
我正在套接字外部创建连接:
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: 'dbname',
})
并且仅用于在触发套接字事件时运行查询
socket.on('check_token', (token) => {
// token is verified safely, not passing it as it is.
connection.query("SELECT * FROM tokens WHERE token = '" + token + "'", (error, results, fields) => {...})
})
但是,我应该在完成释放 mysql 的工作后关闭连接吗?
或者,关闭连接并重新连接是否会使情况变得更糟,因为它总是会在触发事件时重新连接。
或者..有没有更好的方法我不知道?
【问题讨论】:
-
您应该始终关闭并重新打开 JDBC 连接,并使用底层连接池。
-
问题与 JDBC 无关
-
“企业”解决方案是使用“连接池”,它是连接的集合,其中许多保持打开状态。这提供了一些额外的冗余,以防其中一个连接意外关闭,并允许同时查询。对于使用率低到中等的应用程序来说,这太过分了,只需打开数据库连接并重用它就足够了。企业规模的另一种方法是负载平衡多个应用程序而不是使用连接池,因此在这种情况下使用保持打开的单个连接也是可行的。
-
@Codebling 谢谢,当时我不知道连接池。随着 Antek 的回答,我已经用连接池替换了我的连接