我对php缓冲如何工作有点困惑。
假设您在foo.php
中有一个php页面output_buffering = 4096
和php.ini
,而Apache会收到foo.php
的get请求。 foo.php
开始执行,一旦准备好4096个字节,它们就会被发送到Apache。 Apache开始向客户端发送这4096个字节。
这是我不明白的事情:当有一些令人讨厌的跟踪器标注,javascript或发送到浏览器的图像时会发生什么。浏览器被挂断了,并且暂时没有回到Apache,并坚持下去。 Apache没有发布MySQL线程,它正在显示为“睡眠者”。这是正确的还是我完全不在这里?
答案 0 :(得分:4)
你完全偏离了基础:)
当有一个讨厌的跟踪器标注时会发生什么,a javascript或发送到浏览器的图片
这不会影响服务器端的任何内容。
通过PHP运行的每个请求都将
您正在谈论的缓冲发生在步骤2和3之间。因此,让我们采取您的方案。
这是单独的请求,在这里无能为力。所有PHP和Apache正在做的是将HTML返回给浏览器。此HTML可能会生成一个img或javasript标记,该标记将回调到同一个Web服务器,但这些请求将与为现有页面生成HTML的请求分开处理。
答案 1 :(得分:2)
浏览器不会因为从服务器下载HTML数据而“挂断”。它会继续下载整个页面,即使它正在等待一个JavaScript文件在它实际显示它之前就会关闭。
当然,如果浏览器/服务器连接由于某种原因而中断,您可以让Apache等待ACK,直到连接超时,但这不是通常的情况。