【问题标题】:Issue with out.flush() with a webserver网络服务器的 out.flush() 问题
【发布时间】:2013-12-21 20:44:01
【问题描述】:

我在 jsp 中使用out.flush() 来定期更新浏览器中某些执行的结果。这是一个很长的执行过程,大约 10 分钟,我不希望浏览器看起来像是在等待永远。 (它也避免了超时错误)。

直接连接到tomcat端口时它工作正常,但是当我通过apache web服务器时它不工作(可能是因为flush现在被发送到web服务器并且web服务器直到一些缓冲区已满)。

知道我怎样才能获得与连接到 tomcat 端口相同的结果,但要通过网络服务器?

我正在寻找一个简单的解决方案(如果可能的话),我的意思不是 ajax 或在 tomcat 中启动一个新线程然后定期刷新浏览器,因为它们意味着很多更改。

提前致谢。

【问题讨论】:

    标签: java apache jsp tomcat flush


    【解决方案1】:

    mod_jk plugin 中有一个配置参数可以解决这个问题。

    选项是:JkOptions +FlushPackets

    设置此选项后,Apache Web 服务器将刷新它从 Tomcat 接收到的任何内容。

    【讨论】:

    • 正确,很高兴它对你有用。由于这确实“在从 Tomcat 接收到每个 AJP 数据包块后刷新 Apache 的连接缓冲区”,因此性能影响可能是巨大的。如果这对您有影响,那么显而易见的措施当然是提取该长时间运行的操作并为此设置一个专用的 Tomcat 端点(其余部分禁用 FlushPackets)。
    【解决方案2】:

    Apache timeout 增加到 10 分钟?

    #
    # Timeout: The number of seconds before receives and sends time out.
    #
    Timeout 600
    

    【讨论】:

    • 但是浏览器将等待 10 分钟而没有任何变化。我想避免它永远等待的效果。如果我定期刷新,我在 apache web 服务器和 tomcat 之间没有超时问题。
    • Apache 超时只需要高于刷新间隔即可。
    • 假设我每 20 秒刷新一次,Apache 应该有什么超时?
    • 20s以上,默认60s。
    • 我无法更改 Apache 配置,但我会尝试完成更改并进行更新。假设我放了21s。需要 30 秒渲染的页面会超时吗? (此 apache 中还有许多其他应用程序,可能会受到影响)
    猜你喜欢
    • 2017-08-30
    • 2021-10-04
    • 1970-01-01
    • 2013-03-12
    • 2012-12-20
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    相关资源
    最近更新 更多