【问题标题】:long running http connection never gets response back长时间运行的 http 连接永远不会得到响应
【发布时间】:2010-12-11 10:39:05
【问题描述】:

我正在发出一个 http 请求,最终耗时超过 8 分钟。对我来说,这个长期运行的请求工作正常。我能够毫无问题地回复我的浏览器。 (我与服务器位于同一网络上)。

但是,对于某些用户,浏览器从不返回任何响应。 (注意:当同一个http请求在1分钟内执行时,这些用户可以毫无问题地看到响应)

这些用户恰好在另一个网络上。他们的位置和服务器之间可能有一两个防火墙。

我可以在他们的提琴手上看到请求只是坐在那里等待响应。

我现在假设防火墙正在杀死空闲的 http 连接。但我不确定。

如果您知道为什么响应永远不会返回,或者为什么连接永远不会中断.. 这将非常有帮助。

另外:是否可以通过编写一个 Applet 来解决这个问题,该 Applet 以某种方式设法保持向服务器发送虚拟信号,即使在向服务器发送(刷新)请求之后也是如此?

【问题讨论】:

    标签: http connection keep-alive


    【解决方案1】:

    用户可能位于连接跟踪防火墙/NAT 网关后面。当一段时间内没有任何事情发生时,此类网关往往会断开 TCP 连接。在自定义协议中,您可以发送某种心跳消息来保持 TCP 连接处于活动状态,但是使用 HTTP,您无法正确控制该连接,HTTP 也不能促进保持 tcp 连接“活动”所需的操作。

    处理由 HTTP 请求启动的长时间运行的作业的常用方法是在后台启动该作业,立即向客户端发送适当的响应,并让 applet/ajax 请求轮询该作业的状态并返回完成后的结果。

    如果您需要快速修复,请查看是否可以控制服务器和用户之间网关上的任何超时。

    【讨论】:

    • 在我上一条评论中,我提到用户能够在 IIS 服务器上运行长时间运行的请求。所以即使大多数手指都指向防火墙...我发现很难得出这个结论。顺便说一句,请求失败的服务器是 linux+weblogic/websphere.
    • 将此评论标记为答案,但老实说,我并没有更接近解决问题。如果我们找到一种方法来“不”在服务器端使用任何新工具(icefaces、comet 等)进行长时间同步过程,将在此处更新。目前轮询似乎并不比异步更具吸引力。
    • 只要找到一种方法来使用 Ethereal 监控防火墙每条支路上的数据包。看看数据包是否在任何地方停止。 Apache 有一个简单的 Timeout 指令,默认为 300 秒,其中包括控制响应超时。 Websphere 似乎有大量的 timout 配置,我无法确定您需要调整哪一个 - 但您可能需要调整一个设置 - 也许是 ConnectionResponseTimeout
    【解决方案2】:

    您是否考虑过用户使用的浏览器可能存在 HTTP 超时,导致浏览器在一定时间后停止等待响应?

    【讨论】:

    • 问题是,用户能够运行长请求到 Windows-IIS 服务器...所以我认为它与浏览器无关。
    【解决方案3】:

    http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/overview.html
    http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/usingkeepalive.html

    如果你使用的是 Linux 机器试试

    # cat /proc/sys/net/ipv4/tcp_keepalive_time
      7200
    # cat /proc/sys/net/ipv4/tcp_keepalive_intvl
      75
    # cat /proc/sys/net/ipv4/tcp_keepalive_probes
      9
    
    # echo 1500 > /proc/sys/net/ipv4/tcp_keepalive_time
    # echo 500 > /proc/sys/net/ipv4/tcp_keepalive_intvl
    # echo 20 > /proc/sys/net/ipv4/tcp_keepalive_probes
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-22
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      • 2021-09-25
      相关资源
      最近更新 更多