一个 PHP 文件可以处理多个请求吗?

3

当收到HTTP请求时,有没有一种方法可以让一个PHP脚本处理多个请求,而不是每次都启动新的PHP脚本实例?


2
你为什么想要这样的东西?那似乎违反了基本的无状态HTTP隐喻;你能详细解释一下你的场景吗?这样我们就能提供更全面、更宏观的答案了。 - Alex Weinstein
1
基本上,想象一下我的AJAX搜索程序不断向PHP脚本提问...给我这个关键词的结果,给我那个关键词的结果等等。PHP脚本的开始会读取MySQL数据库并进行初始化,所以如果PHP不断重启,它将不得不多次读取数据库。如果我能让它保持活动状态,并让多个愚蠢的AJAX请求由它来处理,我相信效果会更好。 - Robin Rodricks
1
啊,我明白了。那么你所需要的就是一个简单的缓存解决方案。Memcached或APC正好符合你的需求。你需要解决的问题只是缓存惊群,这个问题在这里已经被回答了几次。 - Miha Hribar
6个回答

2

PHP是基于“共享无”概念构建的,这使得您可以通过分布式网络更好地负载平衡和扩展应用程序。因此,“不”,这不能做到。如果您认为启动成本很高,那么可以调整架构以在概念上尽可能“缓存”您的对象/数据/视图。使用serialize()或其他方法。


1
如果你将文件作为HTTP服务器并作为进程运行,则可以。
如果通过Apache和mod_php运行,就不行了。
(你到底为什么要这样做呢?)

为了让一个脚本能够跟踪客户端的重复请求,而不是每次重新初始化。 - Robin Rodricks
这是 PHP 的一项特性/限制,取决于你的角度。通常使用 $_SESSION 跟踪客户端数据,这可能是你应该研究的内容 - 或者使用完全不同的技术。 - Jani Hartikainen

1
我还没有看到关于此的HTTP请求实现。我所能做到的就是等待所有请求返回。你可以通过在命令行中分叉进程并将其发送到后台来完成这个过程。或者你可以利用Gearman(分布式工作)来实现。

你等待所有请求返回,你期望客户端做出什么样的响应?在请求结束后,PHP发送一些HTTP文本后,客户端如何在同一请求中响应以便由同一PHP处理? - Robin Rodricks
我在另一个角度思考这个问题。你收到1个请求,然后实例化几个新的请求。 - Miha Hribar
我该如何从PHP发起请求?这意味着什么? - Robin Rodricks
这意味着PHP在响应请求时会发送更多的请求(比如Web服务)。 - Miha Hribar

1
据我所知,目前没有办法做到这一点。我能想到的最接近的方法是使用一个PHP opcode缓存,比如(xcache或APC)。它们会缓存代码以加快脚本执行速度。我相信每个请求都会有自己的脚本实例。

1

你需要的是缓存数据。

你的php脚本应该简单地检查缓存中是否有请求的有效数据。如果没有,那么进行数据库读取,更新缓存,并将结果返回给用户。

我建议你研究各种缓存库,并仔细考虑如何扩展你的缓存。一个好的起点是Zend_Cache,可能使用memcached作为后端。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接