- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我知道(通过阅读 SO 和其他网站上的无数帖子)持久连接并不是绝大多数开发人员非常喜欢的东西(如果脚本突然终止,连接没有关闭,你可能会结束离开一些表被锁定等),但这真的很糟糕吗?
在我的开发机器(T3400 双核 CPU、4 GB 内存和 5400RPM 硬盘)上,页面加载时间非常不同,这取决于我使用的是持久性还是非持久性连接。非持久连接的 2.09 秒与持久连接的(大约)68 毫秒非常不同。这里有两个示例屏幕截图供您查看:non-persistent与 persistent .
我理解持久连接的风险(我并不是真的每天都使用它们,虽然我觉得这个概念很有趣并且我想探索它),但是没有任何方法可以检测非-关闭连接?
例如,相当于 mysqli 的 change_user
但对于 PDO 或某种 PHP 脚本,服务器每 X 秒作为 cron 作业运行一次以检查遗留问题,随后,关闭它们?我正在阅读有关 register_shutdown_function
的内容,但是,如果我理解正确的话,它会在脚本完成后被调用,所以在实践中,这可能意味着它会在每次脚本完成时结束关闭我的持久连接。还是我错了?
编辑
为了准确起见,我忘了提及我的软件堆栈,所以让我修改一下。我当前的堆栈由以下元素组成:Windows 7 (x86) SP1
作为操作系统,Apache 2.4.3
,PHP 5.4.9
(我总是使用最新版本)和 MySQL 5.5.28
。以 localhost
运行堆栈(我可能正在将它迁移到专用机器上,但目前,它保持这样)。
最佳答案
为避免连接在每次关闭时关闭,您可以在关闭函数中检查 error_get_last()
。
请注意,error_get_last()
也会返回“错误”,例如 E_NOTICE 等。这应该根据您的需要进行过滤。
<?php
register_shutdown_function('shutdown');
function shutdown() {
static $ignore = array (
E_STRICT,
E_NOTICE,
E_USER_NOTICE,
E_DEPRECATED,
E_USER_DEPRECATED, // ...
);
$error = error_get_last();
// if no error has been queued or it should be ignored ...
if(is_null($error) || in_array($error['type'], $ignore)) {
return; // do nothing
}
// here comes your connection close code
connection_close($your_connection);
}
但这是一个非常棘手的解决方案,有很多限制 see www.php.net .
我想知道,因为在使用非永久连接时服务页面需要大约 2 秒的时间。这真的意味着建立与数据库服务器的连接需要大约 2 秒吗?如果是这样,我会注意这一点,因为它看起来很长。你使用什么数据库服务器?数据库服务器是否位于不同的机器上?
关于PHP & PDO - 有什么方法可以建立 'safe' 持久连接吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13877106/
我偶然发现了 Wikipedia 上的线程安全文章;它区分了几个安全级别,尤其是: Thread safe: Implementation is guaranteed to be free of ra
当我启动 Rails 时,如何摆脱这个警告/错误。 在没有 :safe 选项的情况下调用“加载”——默认为安全模式。 => Booting Thin => Rails 3.2.13 applicati
当我启动 Rails 时,如何摆脱这个警告/错误。 在没有 :safe 选项的情况下调用“加载”——默认为安全模式。 => Booting Thin => Rails 3.2.13 applicati
我正在尝试使用 FCM 和 https://www.simplifiedcoding.net/firebase-cloud-messaging-android/ 上提供的教程向我的应用程序添加通知服务
我正在 VB.net 中寻找“安全”点符号。这样的事情是否存在——在 VB.NET 或任何语言中?我希望能够做的是,在使用 non-nullable 遗留对象时,解决如下问题: “如果有计划,如果有案
我在我的机器上使用 Windows 10 家庭单语言版,这是一个 64 位操作系统。 我已经安装了最新版本的 XAMPP,它在我的机器上安装了 PHP 7.2.7。 我是根据摘自 PHP Manual
我在 XmlDocument class documentation 中看到在 MSDN 上 Any public static ( Shared in Visual Basic) members o
例如,我经常想用 SELECT whatever FROM questions WHERE views * N + votes * M > answers AND NOT(answered) O
在DataStax收购Aurelius之后,自从Titan 1.0.0在2015年9月发布以来,自那时以来几乎没有提交过,所以我想知道在生产中使用TitanDB是否安全。谁能给我一些见识? 最佳答案
给定一个文件: dept4.abc.edu dept3.abc.edu dept2.abc.edu dept1.abc.edu 我知道如何使用以下命令获取从底部开始的第三行: tail -3 file
SELECT TO_NUMBER('*') FROM DUAL 这显然给了我一个异常(exception): ORA-01722: invalid number 有没有办法“跳过”它并获取 0 或 N
我不是在问这些是否真的是随机的。我只是想知道如果两个用户同时点击一个页面他们可以获得相同的随机数吗?我在想,如果我在多核服务器上运行它,我会因为同步或其他原因在很长一段时间内生成相同的随机数吗? pu
我有一个服务器存储来自客户端的数据。每个客户端都在自己的线程中工作,并且拥有一个数据对象。 这个数据对象是一个自定义类,让我们调用包含非特定数据的 Data.java,这可能是一些字节,但通常约为 1
我正在开发一个应用程序,其中我有一个包含 5000 行和 4 列的数据库。 problem_id (int) problem_no (string) problem_title (string) da
我有一个表,其中每行的字段数据都不完整,我想要修复。 这就是我的意思: mysql> CREATE TABLE test ( key INT a CHAR(1),
这个问题已经有答案了: How do JavaScript closures work? (86 个回答) 已关闭 6 年前。 所以,这个代码片段工作起来非常方便,但我对它的工作方式感到有点惊讶。 v
我想 compile C++ extensions to SQL Server , 来自文档 Safe mode: Run verifiably typesafe code; compiled wit
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。为了帮助澄清这个问题以便它可以重新打开,visit the help center。 关
这种互斥模式是否像我认为的那样安全?如果是这样,你怎么调用它? lock (_lock) { if (_flag) return; else _flag = true; } try {
假设您使用 EntityFramework 作为 ORM,所有这些都封装在一个单独的 DAL 类库中。 您在另一个“公共(public)”类库中有以下 POCO 对象,它在您的 DAL、SL 和表示层
我是一名优秀的程序员,十分优秀!