2

我不知道 PDO 的连接池是如何工作的,而且搜索也无处可去。

首先,为了清楚起见,PDO 的连接池是自动的吗?

如果没有,我如何在 AJAX 页面上使用它?

我已经计算了本地 wampserver 开发人员通过 mysqli 以每 10 毫秒建立数据库连接的时间成本,并且我试图将等待时间尽可能接近 0。这是我最后的问题之一。

4

3 回答 3

3

如果您正在谈论持久连接,请看这里: http: //php.net/manual/en/pdo.connections.php

持久连接是否在不同的 AJAX 请求中保持打开状态?

是的,而且它们永远不会被重复使用的风险。感谢@carefulnow。我将在这里引用他的评论:

持久连接和连接池不是一回事 连接池首先会创建大量连接,然后应用程序只会抓取其中一个已经建立的连接。持久连接确实会建立新连接,但除非明确告知,否则它们不会关闭(正常连接将在脚本结束时关闭)。如果不小心使用持久连接是危险的,因为大多数数据库都实现了最大连接数,并且在命中时会拒绝进一步的连接。在大多数情况下,正常的连接(只需使用 DSN 和登录详细信息调用 PDO 构造函数)就可以了。

我将通过显示 PHP 代码以及 MariaDB 控制台监视器中生成的连接数来解释它。看下面的截图,注意右下角的“run count”。您会看到使用持久连接时,连接不会关闭,而是进入睡眠模式。忽略连接#231,这是控制台监视器的。 http://i.imgur.com/IL42tjF.pnghttp://i.imgur.com/aDvl7F7.pnghttp://i.imgur.com/IuFEEvO.png。如您所见,时间列表示不活动的长度,而不是连接的时间长度,因此控制台监视器的时间始终为零,因为我刚刚执行了 SHOW PROCESSLIST;。我希望这能让一切都清楚一点,数据库连接管理有时非常棘手。

所以看截图,问题是开放的,如何再次拾取这些持久连接。StackOverflow 上的一些答案说,它们是在线程级别缓存的,所以如果你有多个线程(这是非常值得期待的),那么你会得到很多连接。这会带来遇到 mysql 连接限制的风险。在使用持久连接之前,请确保您了解它们是如何工作的(我不知道,但似乎 @carefulnow :-))

是否可以将持久连接设置为过期?

PHP doc 说它们被缓存了,因此我认为它们会在一段时间后被清理。

更多关于 php 文档

于 2013-01-28T10:25:03.107 回答
3

同样在@fabian 提供的同一链接上,您可以看到以下内容:

<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
    PDO::ATTR_PERSISTENT => true
));
?>

Note: If you wish to use persistent connections, you must set PDO::ATTR_PERSISTENT in the array of driver options passed to the PDO constructor. If setting this attribute with PDO::setAttribute() after instantiation of the object, the driver will not use persistent connections. 
于 2014-01-09T05:53:46.663 回答
0

Pdo persistent 使用带有多个 mysql 请求的 any URL 作为一个连接。如果页面重新加载或使用 pdo 连接访问任何其他 php 页面,则只会建立新的 pdo 连接。我们需要已经在服务器中创建的静态 SQL 连接并将其重用于页面。就像页面加载之前的全局声明一样。只能使用带有 express 的 node mysql 包。在 express js 中,我们可以将 mysql 池连接配置为全局声明。

您可以将 nodejs 中的连接池与 mysql 和 express npm modules 一起使用。并在 node 中设置一个 http 服务器,然后在 post 请求中通过http://127.0.0.1:1000/getdata之类的API向表达服务器发出请求。然后使用 php 作为 getter,使用带有流上下文的 file() 方法来创建发布请求。不要使用 curl,因为执行需要更多时间。使用 while 语句检查 express js 服务器返回的数据

这篇文章是我通过手机创建的,所以我无法给出解释代码以供使用。如果有人需要示例代码。我将发布到 GitHub 存储库。分享您的评论

于 2020-06-18T14:51:09.963 回答