假设我有一个运行 PHP 的网站,上面有较大的图片。每个页面都非常简单,用 PHP 处理几乎不需要时间,但它可能包含几 MB 的大图片。
问题是,如果我将 Apache 设置为处理 100 个连接,并且页面本身需要几毫秒才能生成,那么它是否会保持连接阻塞以进行图像传输,还是在其他连接池中处理?
因为在第一种情况下,下载图像可能需要几秒钟,所以我一次只能为 100 个客户端提供服务。
答案1
无论是 PHP 还是静态文件服务,与服务器的每个连接都来自相同的 100 个连接池。一旦 PHP 提供 HTML,该连接就可以自由地用于其他用途。如果是持久连接,那么它可能会被重新用于下载图像。
请记住,现代浏览器将创建至少 2 到 6 个持久连接,因此一次的客户端数量将少于 100 个。
示例场景假设KeepAlive
如下:一个连接处理 PHP 脚本,然后同一个连接将开始下载图像,浏览器打开或使用现有连接下载其他图像。
答案2
这取决于 keepalive 设置。如果将其设置为“on”,则将重复使用连接。如果将其设置为“off”,则将为每个页面元素(html/php、图像、javascript 文件、css 等)建立新连接。将其保持开启意味着以服务器 CPU 负载为代价为用户提供更好的体验。将其保持关闭意味着浏览体验较慢,但服务器负载会略有减少。您还可以调整 keepalivetimeout 设置。将其设置为 5 或更小。