大家是怎么样使用mysql这个package的或者说是管理?
发布于 10 年前 作者 struCoder 5300 次浏览 最后一次编辑是 8 年前

在创建新的connection肯定是占资源的,是不是每次query后一定要end()? 或者说,这个连接不关闭。如果按照C#或者java来说的话,执行查询后,一定要close().因为一个 连接是十分的占资源,但是在node中或者说在mysql这个package中是怎么样管理connection的。 还有就是大家如何自动处理重新连接。因为mysql这个package8小时候就会自动断开连接。 您可以贴出您的代码,我们讨论下。或者说讲下实现的思路。 由于个人的表达能力有限,不知道大家理解没有。

7 回复

可以使用连接池

@xiuxu123 恩,这个我知道,但目前我就是想探讨我提出的问题。并且希望更好的理解它。:)

不知道你说的c# java是怎样的使用情况,说下apache php吧,每次请求apache都会启动一个新进程来处理客户端请求,每个进程都是隔离的,php模块针对每个用户都要重新建立所有资源,进程结束要释放所有资源。所以php创建mysql链接后也一定要关闭链接,及时你不关闭链接,脚本也会帮你关闭链接。nodejs完全不同,只有一个进程,所有用户请求共享相同的环境,所以在nodejs进程启动起来后建立mysql链接就不用关闭,所有用户共享这一个链接, 直到nodejs进程结束,也就是服务器关闭。 每次请求创建和释放链接在nodejs里是不适用的

  1. mysql包本身不提供连接池,可以使用这个模块generic-pool,不过这个模块不提供我下面说的功能。
  2. 不是mysql的package8小时就断开连接,是mysql server 默认8小时会断开闲置连接,如果有connection pool,就定期检查里面的connection是否可用就OK了,比如随便发个sql: select 1 + 1

嗯,感谢您的解答,现在对Nodejs中的mysql这个package对于connection有了进一步的理解,还有就是它里面的end()方法的使用占不占资源,或者说,end()方法是不是在拿到了con并且进行查询之后,一定要调用。

嗯,感谢您的解答,但是在mysql包里面是有mysql.createPool()提供连接池的使用的。您提供的方法还是很不错的。

mysql这个模块有连接池。node中不用关连接。

回到顶部