在MySQL中使用持久连接,但仍有许多打开的连接

问题描述 投票:0回答:1

我有一个使用回调API的聊天机器人,每次有人写消息时,该聊天机器人都会在我的服务器上发送一个请求

最近,我已经读过所谓的持久连接,这使我认为,每次在服务器上收到请求时,我都可以避免重新连接到数据库,因为数据库加载需要一些时间,并且我想加快速度过程

因此,我已将脚本中的任何连接更改为具有p:前缀,例如这样

$conn = new mysqli("p:".$servername, $username, $password, $dbname);

据我所知,mysqli通过这种方式查找具有相同参数的现有连接,或者如果不存在则创建一个连接,而不是每次都打开一个新连接

但是仍然,几个小时后,我检查了打开的连接,我注意到一堆类似的连接,只是它们的ID不同,就像这样

  ID      | USER | HOST      | DB       | COMMAND | TIME | STATE | INFO |
+---------+------+-----------+----------+---------+------+-------+------+
| 5248403 | user | localhost | database | Sleep   |   24 |       | NULL |
| 5248609 | user | localhost | database | Sleep   |  113 |       | NULL |
| 5247822 | user | localhost | database | Sleep   |    1 |       | NULL |
| 5248652 | user | localhost | database | Sleep   |   79 |       | NULL |

((userdatabase掩盖了实际用户和数据库)


关于持久连接,我是否有误解?如何避免类似的连接?

php mysql mysqli persistent
1个回答
0
投票
我猜这是连接池。在您的情况下,它将创建一个包含4个连接的池,该池可用于并行处理4个请求/查询。如果您只有1个连接并且正在运行查询,则任何其他需要数据库的请求都必须等待。

这可以说用于许多其他的webserver / frameworks,而对于php / mysqli则没有特别说明

© www.soinside.com 2019 - 2024. All rights reserved.