【发布时间】:2014-04-15 11:07:07
【问题描述】:
我正在使用XMLHttpRequest 2 通过onprogress 事件获得chunked 响应并将其显示在浏览器中。一切似乎都很好,但我有点困惑。考虑以下代码:
<?php
echo "I' am sending ";
ob_flush();
flush();
echo "content to client.";
ob_flush();
flush();
这是相当标准的PHP 向客户端发送chunked 响应的方式。但是,我希望将输出作为两个不同的块,一个包含第一个 echo 的结果,另一个包含第二个。但我得到了两个echo 语句的一个组合块。当我将sleep(1) 放在第一个flush() 之后时,一切似乎都正常。
我的问题是,在发送已经接收到的块之前,网络服务器端是否有一些故意等待等待一些其他内容,或者是否有一些线程调度机制迫使 Apache 的网络层等待轮到它。
编辑
我忘了提到我已经禁用了网络服务器的输出缓冲,这意味着如果我 flush 来自 PHP 的某些内容将被发送到浏览器。
非常感谢任何帮助。
谢谢。
【问题讨论】:
-
即使您正在刷新 PHP 的缓冲区,您的输出也可能会卡在 Web 浏览器的缓冲区中,直到脚本完成运行。
-
@nettux443 我更新了我的问题。
标签: php ajax apache http flush