对于知道Apache服务器如何工作的人来说,有一些简单的问题。
向.php文件发送AJAX .send请求是否会在后台启动新进程?
如果是,该过程何时结束?
当我向同一个php文件发送多个AJAX请求时,服务器是否会创建同一个文件的多个进程,或者是否有办法将所有请求发送到一个内部有无限循环的单个PHP进程?
答案 0 :(得分:1)
ajax请求与来自Web服务器端的任何其他请求没有区别。不同之处在于客户端,浏览器将如何处理请求。
对同一个php脚本的多个请求被处理,就像对不同php脚本的多个请求一样,服务器将单独和同时处理它们。
如果您使用排他锁,或者您使用文件会话,并且仅针对同一会话中的请求,则会逐个处理请求(当您启动文件会话时,会话将被独占锁定,并且会在请求时自动解锁端)。
当请求的过程完成时,将销毁在执行过程中创建的所有变量。如果您需要在不同请求中保持持久性,可以使用像php-apc
这样的操作码缓存机制有没有办法将所有请求发送到单个PHP进程 里面有无限循环吗?
为什么需要这个?
答案 1 :(得分:0)
Apache按照以下原则处理请求:
Apache留下一些备用进程/线程来处理客户端请求。来自客户端的传入连接由空闲进程处理。如果没有空闲进程,除非达到最大进程数,否则apache将启动一个新进程。在这种情况下,您的请求正在等待其他一些流程完成其工作。
当空闲进程太多或进程处理了最大数量的请求时,进程/线程结束。
Ajax请求一次由PHP脚本处理。对于每个ajax请求,您的脚本从开始运行。您可以使用“长时间运行”的PHP脚本连续读取输入和发送输出,但它会阻止服务器资源并在多个级别上受到超时。通常,在像apache这样的繁重服务器上使用不是一个好主意,对于繁忙的站点来说则不那么重要。 如果您需要连续的浏览器 - 服务器通信,那么带有适当服务器的HTML5 websockets提供了一个很好的解决方http://socket.io