【问题标题】:Multiple flush statements in PHP and ApachePHP 和 Apache 中的多个刷新语句
【发布时间】: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


【解决方案1】:

见:http://www.icemelon.com/tutorials/20/Output_While_Script_Still_Running.htm

您可能会在此处看到浏览器输出缓冲。尝试添加:

for($k = 0; $k < 40000; $k++)
    echo ' ';

就在您刷新之前,以便填满浏览器的缓冲区并使其吐出您的输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多