繁体   English   中英

使用 AJAX 的 PDO 连接池

[英]PDO Connection Pooling with AJAX

我不知道 PDO 的连接池是如何工作的,而且搜索也无济于事。

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

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

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

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

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

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

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

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

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

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

PHP 文档说它们已被缓存,因此我认为它们会在一段时间后被清除。

更多关于 php 文档

同样在@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. 

Pdo 持久使用具有多个 mysql 请求的任何 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向 express 服务器发出请求。 然后使用 php 作为 getter 使用 file() 方法和流上下文来创建发布请求。 不要使用 curl,因为它需要更多的时间来执行。 使用while语句检查express js服务器返回的数据

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM