php链接数据库持久,PHP怎么持久连接数据库?

永久的数据库连接是指在脚本结束运行时不关闭的连接。当收到一个永久连接的请求时。PHP将检查是否已经存在一个(前面已经开启的)相同的永久连接。如果存在,将直接使用这个连接;如果不存在,则建立一个新的连接。所谓“相同”的连接是指用相同的用户名和密码到相同主机的连接。

对web服务器的工作和分布负载没有完全理解的读者可能会错误地理解永久连接的作用。特别的,永久连接不会在相同的连接上提供建立“用户会话”的能力,也不提供有效建立事务的能力。实际上,从严格意义上来讲,永久连接不会提供任何非永久连接无法提供的特殊功能。

为什么?

这和web服务器工作的方式有关。web服务器可以用三种方法来利用PHP生成web页面。

第一种方法是将PHP用作一个“外壳”。以这种方法运行,PHP会为向web服务器提出的每个PHP页面请求生成并结束一个PHP解释器线程。由于该线程会随每个请求的结束而结束,因此任何在这个线程中利用的任何资源(例如指向SQL数据库服务器的连接)都会随线程的结束而关闭。在这种情况下,使用永久连接不会获得任何地改变——因为它们根本不是永久的。

第二,也是最常用的方法,是把PHP用作多进程web服务器的一个模块,这种方法目前只适用于Apache。对于一个多进程的服务器,其典型特征是有一个父进程和一组子进程协调运行,其中实际生成web页面的是子进程。每当客户端向父进程提出请求时,该请求会被传递给还没有被其它的客户端请求占用的子进程。这也就是说当相同的客户端第二次向服务端提出请求时,它将有可能被一个不同的子进程来处理。在开启了一个永久连接后,所有请求SQL服务的后继页面都能够重新使用这个已经建立的SQLServer连接。

最后一种方法是将PHP用作多线程web服务器的一个插件。目前PHP4已经支持ISAPI、WSAPI和NSAPI(在Windows环境下),这些使得PHP可以被用作诸如NetscapeFastTrack(iPlanet)、Microsoft'sInternetInformationServer(IIS)和O'Reilly'sWebSitePro等多线程web服务器的插件。永久连接的行为和前面所描述的多过程模型在本质上是相同的。注意PHP3不支持SAPI。

如果永久连接并没有任何附加的功能,那么使用它有什么好处?

答案非常简单——效率。当客户端对SQL服务器的连接请求非常频繁时,永久连接将更加高效。连接请求频繁的标准取决于很多因素。例如,数据库的种类,数据库服务和web服务是否在同一台服务器上,SQL服务器如何加载负载等。但我们至少知道,当连接请求很频繁时,永久连接将显著的提高效率。它使得每个子进程在其生命周期中只做一次连接操作,而非每次在处理一个页面时都要向SQL服务器提出连接请求。这也就是说,每个子进程将对服务器建立各自独立的永久连接。例如,如果有20个不同的子进程运行某脚本建立了永久的SQL服务器永久连接,那么实际上向该SQL服务器建立了20个不同的永久连接,每个进程占有一个。

注意,如果永久连接的子进程数目超过了设定的数据库连接数限制,系统将会产生一些缺陷。如果数据库的同时连接数限制为16,而在繁忙会话的情况下,有17个线程试图连接,那么有一个线程将无法连接。如果这个时候,在脚本中出现了使得连接无法关闭的错误(例如无限循环),则该数据库的16个连接将迅速地受到影响。请查阅使用的数据库的文档,以获取关于如何处理已放弃的及闲置的连接的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值