【问题标题】:Apache output flush configurationApache 输出刷新配置
【发布时间】:2019-03-20 01:03:52
【问题描述】:

我在两个不同的服务器 Centos 和 Debian 上有以下 perl 脚本,它们都运行 Apache Web 服务器:

$|++;
print "Content-type: text/plain\n\n";

for ($i=1; $i<=10;$i++) {
    print "$i\n";
    sleep(1);
}
print "Done.\n";

在使用 Apache/2.2.3 和 perl v5.8.8 输出刷新的 centos 上工作正常,我可以在浏览器中看到计数器的进程。

在 Debian Apache/2.4.10 和 perl v5.20.2 输出刷新不起作用,我在 10 秒后才能在浏览器中看到整个页面。

有没有办法配置 apache 以便像在 centos 上一样刷新输出?

【问题讨论】:

  • 尝试使用select-&gt;autoflush(1),而不是依赖之前设置的魔法值。
  • @choroba,这是一个风格建议吗?因为这不会产生任何功能差异。 (如果你想避免$|++; 的魔力,你只需要$| = 1;。显然,select-&gt;autoflush(1); 更清晰,但代价更高,因为它涉及对select 的三个调用和对@ 的两个分配987654327@.)
  • Re "有没有办法配置 apache",我确认这不是 Perl 的差异造成的。
  • 请注意,use IO::Handle (); 需要 autoflush 才能在 5.8.8 中作为句柄上的方法调用。我的偏好是\*STDOUT-&gt;autoflush(1);,只要你知道你正在处理 STDOUT,但你是对的,它不应该产生功能上的差异。
  • 选择->autoflush(1);或 *STDOUT->autoflush(1);没有效果;我认为这是一个 apache 设置而不是 perl 的区别。

标签: apache perl output flush


【解决方案1】:

要刷新输出,我必须禁用 varnish 和 mod_deflate。

谢谢你帮助我。

分类

【讨论】:

    猜你喜欢
    • 2013-11-29
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 2018-03-17
    • 2013-02-03
    相关资源
    最近更新 更多