PHP池功能(不仅仅是数据库连接)

PHP池功能(不仅仅是数据库连接),php,connection-pooling,pooling,object-pooling,Php,Connection Pooling,Pooling,Object Pooling,是否可以在PHP中汇集数据或功能 我编写的PHP代码将唤醒以处理响应、加载函数、打开数据库连接、创建对象、初始化它们,然后在处理响应后0.01秒后消失,留下下一个请求重新加载、解析并再次运行相同的内容 这是不合情理的,我发现没有功能/数据/对象池会让我的很多工作失去价值。例如,我可以编写类,发现它们在每个请求中都被重新初始化——我试图开发一个有意义的对象结构有什么意义 因此:如何编写PHP来共享数据和功能?PHP中没有一种解决方案池或持久状态,它没有Java那样的应用程序状态,它或多或少遵循无状

是否可以在PHP中汇集数据或功能

我编写的PHP代码将唤醒以处理响应、加载函数、打开数据库连接、创建对象、初始化它们,然后在处理响应后0.01秒后消失,留下下一个请求重新加载、解析并再次运行相同的内容

这是不合情理的,我发现没有功能/数据/对象池会让我的很多工作失去价值。例如,我可以编写类,发现它们在每个请求中都被重新初始化——我试图开发一个有意义的对象结构有什么意义


因此:如何编写PHP来共享数据和功能?

PHP中没有一种解决方案池或持久状态,它没有Java那样的应用程序状态,它或多或少遵循无状态协议,即HTTP。您可以做的是:

  • 创建到数据库的持久连接(即,如果使用相同的参数调用它们,它们将被重用,它们不会神奇地存在,但可以避免实际连接的开销)
  • 将对象存储在会话中以保持计算状态(它们将被序列化,并在下一个请求中取消序列化)
  • 将需要大量一次性初始化的工作路由到独立于Web服务器(gearman服务器和workers)运行的守护进程

  • 但最后,如果应用程序需要全局状态,那么PHP可能不是正确的解决方案

我和你有同样的担忧;但奇怪的是,PHP速度惊人。除了应该由服务器缓存的数据库查询之外,只剩下连接问题。可以很容易地汇集到一起

我的系统甚至必须解析一个数kb的XML文件以获得响应。仍然是瓶颈始终是数据库服务器


PHP的这种暂时状态有好的一面。如果请求有问题,系统崩溃不会对下一次连接产生任何不利影响。对我来说似乎更稳定。

PHP几乎从来都不是瓶颈。我们的服务器在峰值时刻每秒处理数百个请求。这些要求也不是很小。这似乎不合逻辑,但PHP实际上非常快。您还可以使用APC缓存来缓存预编译的PHP文件,使其速度更快。然后,您可以使用MemCache来存储数据,这样任何查询结果和类似的数据都可以轻松缓存,而不必依赖MySQL的次优查询缓存。

“但最后,如果您的应用程序需要全局状态,可能PHP不是正确的解决方案”是的。。。我希望不是这样的。。。但是非常有用,谢谢。所以-我可以使用APC缓存来保存一组我通常使用include加载的函数。。。这让人松了一口气。您不需要从PHP主动控制APC缓存。APC可以自动保存这些文件,因此当您包含它们时,您可以从缓存中获取预编译版本,而不是从磁盘获取纯文本版本。