<?php
ob_start();
echo 'test';
ob_end_flush();
flush();
sleep(10);
我试图在连接完成之前输出 ajax 请求的响应,但不工作 - 它会等待 10 秒才能成功获取响应。是 http 服务器的问题,在我的情况下是 Apache 吗?如果是这样,如何解决它它会立即回应回应吗?
<?php
ob_start();
echo 'test';
ob_end_flush();
flush();
sleep(10);
我试图在连接完成之前输出 ajax 请求的响应,但不工作 - 它会等待 10 秒才能成功获取响应。是 http 服务器的问题,在我的情况下是 Apache 吗?如果是这样,如何解决它它会立即回应回应吗?
虽然
flush()
,ob_end_flush()
和ob_flush()
应该保证将输出发送到服务器,但我发现 PHP 有时对特定的软件配置不太宽容。特别是在 Windows 上,输出缓冲设置起来很麻烦,我发现在系统之间可靠工作的唯一方法是在每次刷新时重置输出缓冲,如下所示:
这是一个丑陋的解决方案吗?是的。但是在所有与输出缓冲相关的错误都得到修复之前,我认为这种解决方法不会很快在生产代码中消失。
另请注意,某些防病毒软件(Panda AV 和其他)和代理将保留所有数据,直到套接字关闭。您不能保证所有客户端都会收到正确的刷新数据。
知道某事是服务器还是浏览器/库问题的最简单方法是实时监控请求。在您的情况下,两种最简单的方法是:
如果您看到数据立即返回但需要 10 秒才能显示,则您的浏览器或 AJAX 库正在等待连接关闭,然后再处理响应。如果你需要 10 秒才能得到任何东西,那么你的服务器或 PHP 模块在这里有问题。