首页 > 解决方案 > 我应该在 websocket 中关闭 mysql 连接吗

问题描述

简而言之,我正在使用 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 的工作后关闭连接吗?
或者,关闭连接并重新连接是否会使情况变得更糟,因为它会在触发事件时重新连接。
或者..有没有更好的方法我不知道?

标签: mysqlsocket.io

解决方案


建立与数据库的连接需要很长时间。作业完成后,您不应断开与 db 的连接。应用服务器应该使用连接池。当您的服务器启动时启动您的池,例如 10 个并发连接。池大小(连接数量)取决于您的系统负载。有时你需要2个并发连接,有时100个。当你想从db中获取数据时,只需从pool中获取连接,不需要时返回。


推荐阅读